KnockoutJS可观察和数据绑定之间的关系

时间:2012-10-10 14:25:42

标签: javascript knockout.js knockout-validation

我有viewModel

var viewModel = {
    amount: ko.observable(1),
    rate: ko.observable(2),
    rate222: ko.observable(2)
};


<input data-bind="value: amount" />
<input data-bind="value: rate" />

我怎么知道rate222没有绑定在这个文件上?

  • 需要用于多页验证,用于在现有文档上声明!

最好的问候


UPD:

这不解决这个问题jsfiddle.net/x26sS/14绑定值“rate222”不在DOM中,但淘汰赛并不这么认为:“show,rate12312”。

1 个答案:

答案 0 :(得分:0)

Knockout中没有一种很好的方法可以明确地知道元素是开箱即用的。

编写一个自定义绑定可以很容易地将bound标志添加到observable或计算中,然后在查找“未绑定”属性时可以使用它。

绑定可能看起来像:

ko.bindingHandlers.track = {
    init: function(element, valueAccessor) {
       var observable = valueAccessor();
       if (ko.isObservable(observable)) {
           observable.bound = true;  
       }

       //clear the flag if this element is removed
       ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            var observable = valueAccessor();
            if (ko.isObservable(observable)) {
                observable.bound = false;     
            }     
       });           
    }
};

您甚至可以包装值绑定以将此功能添加到其中。

这是一个在元素上使用此绑定的示例,然后提供一个循环遍历视图模型的函数(仅在示例中为顶级)并查找任何未绑定的属性。

http://jsfiddle.net/rniemeyer/x26sS/