javascript - 如何使用 KnockoutJS 从 observableArray 中删除一个项目

标签 javascript knockout.js

目标

使用 KnockoutJS 从 observableArray 中删除一个项目。

问题

我不知道——没有任何反应。

我的标记:

<button data-bind="click: Summary.remove">
    <i class="icon-ok"></i>
</button>

我的删除操作:

self.remove = function (item) {
    self.products.remove(item);
};

我的可观察数组:

self.products = ko.observableArray();

发生了什么?

没有。 self.remove 函数正在触发,但项目没有任何反应。

更多详情?

我认为我提供的详细信息已经足够了,但如果您需要更多,请告诉我。

最佳答案

假设您从 foreach 绑定(bind)内部调用,我相信您应该使用 $parent 上下文来调用 remove 函数:

<button data-bind="click: $parent.remove">
    <i class="icon-ok"></i>
</button>

这里有一个示例 fiddle ,说明我通常如何构建从列表中添加/删除项目的结构:

http://jsfiddle.net/E53tc/

html

<ul data-bind="foreach: products"> 
    <li>
    <span data-bind="text: name"></span>
    <button data-bind="click: $parent.remove">Remove</button>
    </li>
</ul>
<button data-bind="click: add">Add New </button>

javascript

var product = function (data) {
    var self = this;

    self.name = ko.observable(data);
}

var vm = function () {
    var self = this;

    self.remove = function (item) {
        self.products.remove(item);
    };

    self.add = function () {
       self.products.push(new product("new product"));   
    }

    self.products = ko.observableArray();
}

var viewModel = new vm();
viewModel.products([ new product("product a"), new product("product b")]);
ko.applyBindings(viewModel);

关于javascript - 如何使用 KnockoutJS 从 observableArray 中删除一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495390/

相关文章:

javascript - viewModel.errors不是函数, knockout 验证

javascript - 如何允许表中的多行通过物化开关打开或关闭?

node.js - 在 ember.js 中处理安全性

javascript - 如何使用 knockout.js 为列表中的选定项目动态生成编辑表单

javascript - 用另一个数组过滤 AngularJS 数组

javascript - Knockout 和 breeze.js take 方法不工作分页

javascript - Knockout - 通过多个对象属性过滤可观察数组中的对象

javascript - Gulp Uglify 从 Paper.js 库中生成奇怪的字符

javascript - 转换后的 blob 正在获取格式不正确的文件

php - 使用 php 和 jquery 解决简单任务的想法