2

http://jsfiddle.net/scottbeeson/SRUKN/16/

单击左侧列表中的项目会将它们添加到右侧列表中。单击右侧列表中的项目应将其删除。它会删除第一个已经存在的项目,但不会删除添加的项目。我需要重新应用绑定还是什么?

ko.applyBindings(viewModel);

$('.result').on('click',function() {
    var item = ko.dataFor(this);
    viewModel.visibleItem.push(item);
});

$('.visibleItem').on('click',function() {
    var item = ko.dataFor(this);
    viewModel.visibleItem.remove(item);
});
4

1 回答 1

3

您的点击处理程序只会附加到 DOM 中已经存在的元素。如果您想让它适用于动态添加的元素,您需要将您的处理程序附加到更高级别,该级别已经在 DOM 中并且不会更改(例如documentor 在您的情况下.top):

$(document).on('click', '.visibleItem', function() {
    var item = ko.dataFor(this);
    console.log(item)
    viewModel.visibleItem.remove(item);
});

演示JSFiddle。

但是 Knockout 的方式是让 Knockout 处理你的事件:

因此,在您的视图模型上添加处理程序:

viewModel.removeVisible = function(item) {
    viewModel.visibleItem.remove(item);
}

并将其绑定在您的视图中:

<div class="visibleItem" data-bind="click: $parent.removeVisible">
</div>

演示JSFiddle。

于 2013-06-12T16:42:25.920 回答