从列表中删除项目,knockout.js

时间:2012-04-18 11:16:07

标签: javascript asp.net-mvc-3 knockout.js

请参阅代码(在ASP MVC 3上使用knockout.js):

self.tags = ko.utils.arrayMap(@Html.Raw(new JavaScriptSerializer().Serialize(Model.Tags)), function(tag) {
                return {
                    label: tag.Name,
                    value: tag.id
                };
        });

self.addTag = function(event, ui){
            $(event.target).val("");

            var tag = ui.item.label;
            var id = ui.item.value;

            self.selectedTags.push("id: " + id + ", Name: " + tag);
            //Delete selected tag here from list
            return false;
        }

问题是,如何从标签中删除? (我尝试使用remove(),遇到错误。但是当我尝试pop()时,它成功了)

3 个答案:

答案 0 :(得分:3)

你的tags数组是普通数组,不是可观察数组,它没有删除方法。

Knockout有正常数组的助手

ko.utils.arrayRemoveItem(array, itemToRemove)

或者你可以使用splice(实际上ko.utils.arrayRemoveItem使用splice)

答案 1 :(得分:1)

通常,您可以使用splice从javascript数组中删除项目。

Pop不会工作,因为它只删除最后插入的值。

var a = [1,2,3] a.splice(1,1); #删除位置1 =>处的一个元素[1,3]

如果你愿意的话,你可以在淘汰赛中使用它。

knockout也有一些类似于array.remove(function(a){return a.id === 1;})的api,它返回所有id为1的元素。

编辑: 作为一个例子,你可以看看这个JsFiddle http://jsfiddle.net/Ng39n/

答案 2 :(得分:1)

您可以在视图模型中添加一个函数removeTag,如下所示:

self.removeTag = function(tag) { self.tags.remove(tag); })