如何使用KnockoutJS从observableArray中删除项目

时间:2013-07-05 19:04:34

标签: 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);
};

My observableArray:

self.products = ko.observableArray();

发生了什么事?

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

更多细节?

我认为我已经通过的细节已经足够,但如果你需要更多,请告诉我。

1 个答案:

答案 0 :(得分:3)

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

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

下面是一个示例小提琴,说明我通常如何在列表中添加/删除项目:

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>

<强> javscript

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