无法从可观察数组中删除项目

时间:2013-12-24 15:34:57

标签: knockout.js ko.observablearray

我在jsFiddle here上有一部分代码。有人能说'removeItem'函数有什么问题吗?

HTML

<div id="newIdea" data-bind="if: isNew">   
<div data-bind="with: idea">
           <input type="text" style="width: 200px;"
            data-bind='value:wanted().itemToAdd, valueUpdate: "afterkeydown"' />
            <input type="button" data-bind="click:wanted().addItem" value="add" />
    <ul data-bind="foreach: wanted().allItems">
        <li>
           <span data-bind="text:$data"></span>
           <input type="button" 
           data-bind="click:$parent.wanted().removeItem"  value="remove"/>
        </li>
    </ul> 
</div>
</div>

的JavaScript

var WantedListModel = function () {
    var self = this;
    self.itemToAdd = ko.observable("");
    self.allItems = ko.observableArray();
    self.addItem = function () {
        var item = self.itemToAdd();
        self.allItems.push(item);
        self.itemToAdd("");
    };
    self.removeItem = function () {
         self.allItems.remove(this);
    };
};

var vm = {
     isNew: ko.observable(true),
     idea: ko.observable({
         wanted: ko.observable(new WantedListModel())
     })
};
ko.applyBindings(vm);

我必须使用这样的层次结构

2 个答案:

答案 0 :(得分:3)

Ko将当前元素作为函数的第一个参数传递,因此您应该使用它而不是:

self.removeItem = function (data) {
    alert(data);
    self.allItems.remove(data);
};

这是工作小提琴:http://jsfiddle.net/9JsUJ/8/

答案 1 :(得分:1)

问题是你那里没有花括号。下次检查你的控制台 -

http://jsfiddle.net/9JsUJ/9/

self.removeItem = function () 
    self.allItems.remove(this);
};

小提琴已经包含了修复,你的小提琴正在运作。

self.removeItem = function () {
    self.allItems.remove(this);
};
相关问题