17

使用以下代码,我希望每次更新 viewModel.item 可观察对象时都会执行我的更新函数。我可以看到我的 init 和 update 函数按预期在页面加载时触发,但在单击我的按钮时不会触发,这会更新 observable 的值。

标记:

<button id='addButton'>item++</button>
<br/>
<span>viewModel.item = </span>
<span data-bind='text: $data.item(), bind: viewModel.item'></span>

脚本:

$(document).ready(function() {
    $('#addButton').click(function() {
        viewModel.item(viewModel.item() + 1);
    });    
    var viewModel = {
        item: ko.observable(1)
    };        
    ko.bindingHandlers.bind = {
        init: function(element, valueAccessor) {
            alert('init');
        },
        update: function(element, valueAccessor) {
            alert('update');
        }  
    };        
    ko.applyBindings(viewModel);
}); 

我浏览了一些类似的问题,但没有找到可比较的例子。我在这里创建了一个 JSFiddle 。

4

1 回答 1

32

绑定处理程序的update函数将在它访问的可观察对象更新时运行。您的函数不会访问任何可观察对象。

这是一个可以使用的更新版本:

ko.bindingHandlers.bind = {
    init: function(element, valueAccessor) {
        alert('init');
    },
    update: function(element, valueAccessor) {
        ko.unwrap(valueAccessor());
        alert('update');
    } 
};        

http://jsfiddle.net/vMD74/14/

于 2014-05-27T02:01:08.267 回答