2013-02-17 56 views
0

我需要进行自定义绑定,如value绑定。这里是我的代码:如何防止在knockout.js自定义绑定中更新和值更改回调的递归调用?

ko.bindingHandlers.myValue= { 
    init: function(element, valueAccessor) { 
     $(element).change(function() { 
      var value = valueAccessor(); 
      value($(this).val()); 
     }); 
    }, 
    update: function(element, valueAccessor) { 
     var value = valueAccessor(); 

     $(element).val(ko.utils.unwrapObservable(value)) 
    } 
}; 

现在,如果我改变观察到的价值,update将被调用,该元素的值将被改变,所以在init描述的change回调将被执行。
它将更改value,因此将调用update回调等。我对吗?

如果是,我该如何防止这种递归?
如果不是,为什么?

+0

你试试你的绑定? 'update'会被调用,但只要用'.val'设置一个元素的值不会触发'.change'事件。你想用这个完成什么? – 2013-02-17 16:37:51

+0

@AndrewWhitaker,你确定?如果你确定的话,写作答案。不,我没有试过:) – shift66 2013-02-17 16:50:45

+0

[看看这个例子](http://jsfiddle.net/CCNtR/13/)。没有无限的递归发生。 – 2013-02-17 17:16:33

回答

3

你的代码不应该导致递归情况; .val方法不会触发.change事件。

退房使用您的代码在这里一个例子:http://jsfiddle.net/CCNtR/13/

相关问题