【问题标题】:How to implement reset functionality in knockoutjs如何在 knockoutjs 中实现重置功能
【发布时间】:2014-07-15 08:09:06
【问题描述】:

我有 20 个文本框与敲除 observables 绑定。最初,这些文本框与数据库中的数据绑定。当用户编辑文本框并单击重置按钮时,需要恢复旧的(从数据库中获取的数据)。

任何人都知道如何使用淘汰赛 js 来实现这一点吗?

【问题讨论】:

标签: knockout.js


【解决方案1】:

首先创建一个reset绑定,例如

ko.bindingHandlers.resetValue = {
    init: function(element, valueAccessor){
        var attribute = valueAccessor();

        attribute.initialValue = ko.unwrap(attribute);

        attribute.reset = function(){
            if(attribute.isDirty()){
                attribute(attribute.initialValue);
            }            
        };

        attribute.isDirty = ko.computed(function(){
            return attribute.initialValue !== ko.utils.unwrapObservable(attribute);
        });

        ko.applyBindingsToNode(element, {
            click: function(){
                attribute.reset();
            },
            visible: attribute.isDirty            
        });
    }
};

这里有更多关于Creating custom bindings的信息

现在我们可以使用resetValue 绑定了

<div>
    <a href="#" data-bind="resetValue: firstName">Reset</a>
    <input data-bind="value: firstName"></input>
</div>
<div>
    <a href="#" data-bind="resetValue: lastName">Reset</a>
    <input data-bind="value: lastName"></input>
</div>

这里是 ViewModel

var ViewModel = function(){
    var self = this;
    self.firstName = ko.observable("First Name");
    self.lastName = ko.observable("Last Name");
};

ko.applyBindings(new ViewModel());

看看jsfiddle version

【讨论】:

  • 感谢代码真的很感激。而是在每个文本框上重置可以为所有文本框提供通用重置?有可能吗?
  • 我有一个稍微不同的视图模型结构,比如父母和孩子。您可以在这里看到 jsfiddle jsfiddle.net/e2Ne9/23 在这种情况下,是否可以同时重置主视图模型和子视图模型?
【解决方案2】:

我使用this plugin,这很棒,可以让您回滚更改或提交更改等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2020-03-03
    • 2012-12-16
    • 2022-11-02
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多