knockout.js - 为什么我无法删除绑定(bind)后添加的可观察对象?

标签 knockout.js ko.observablearray

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

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

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);
});

最佳答案

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

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

演示 JSFiddle.

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

因此在您的 View 模型上添加处理程序:

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

并将其绑定(bind)到您的 View 中:

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

演示 JSFiddle.

关于knockout.js - 为什么我无法删除绑定(bind)后添加的可观察对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070753/

相关文章:

knockout.js - 将 knockout 可观察量插入 knockout 可观察数组

javascript - 未定义 Knockout Typescript View 模型函数

javascript - 如果模板内的绑定(bind)现在不显示,则 knockout 可观察值具有什么值(value)?

node.js - 在服务器端使用 node.js + express.js 在 SPA(单页应用程序)中动态生成内容的 SEO

javascript - 将不同的 json 数据映射到可观察数组

javascript - 使用 knockout 将对象添加到可观察数组

jquery - 如何创建在同一页面上多次使用的 Knockout 函数?

javascript - 如何使用shim在requirejs中加载knockout.observableDictionary插件?

javascript - knockout 映射 > 映射数组始终更新

jquery - Knockout JS 中的依赖可观察数组