自定义绑定更新部件从KO 2.1.0停止工作到2.2.0

时间:2013-09-13 09:30:24

标签: knockout.js knockout-2.0

似乎自定义绑定中的更新已停止工作(它在2.2.0版本中运行)。

我将警报放在应该触发的事件中,并且在按下“添加”按钮时它不起作用。

有人可以确认这个或提供信息问题在哪里以及应该做什么?

请参阅the working version (using KO 2.1.0) vs the broken version (using KO 2.2.0)

HTML:

<div data-bind="foreach: items, myBind: {}">
    <h3>
        <a href="#" data-bind="text: id"></a>
    </h3>
    <div data-bind="text: name"> </div> 
</div>

<button data-bind="click: add">Add Item</button>

<hr/>

JS:

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

function Item(id, name) {
    this.id = ko.observable(id);
    this.name = ko.observable(name);
}

var viewModel = {
    items: ko.observableArray([
        new Item(1, "one"),
        new Item(2, "two"),
        new Item(3, "three")]),
    add: function() {
        viewModel.items.push(new Item(4, "foo"));
    }
};

ko.applyBindings(viewModel);

1 个答案:

答案 0 :(得分:2)

我认为您的问题已经回答here。您需要在绑定中创建对可观察数组的依赖关系。例如:

update: function(element, valueAccessor) {
    //create a dependency, normally you would do something with 'data'
    var data = ko.utils.unwrapObservable(valueAccessor());
    alert('update');        
}

请参阅this fiddle

它在2.1中工作的事实可能被视为一个错误。