1

请查看代码(在 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()时,它成功了)

4

3 回答 3

3

您的标签数组是普通数组,而不是可观察数组,它没有删除方法。

Knockout 有普通数组的助手

ko.utils.arrayRemoveItem(array, itemToRemove)

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

于 2012-04-18T12:57:11.043 回答
1

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

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

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

如果需要,您可以将其与淘汰赛一起使用。

淘汰赛也有一些像 array.remove(function(a){ return a.id === 1; }) 这样的 api,它返回所有 id 为 1 的元素。

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

于 2012-04-18T11:39:08.727 回答
1

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

self.removeTag = function(tag) { self.tags.remove(tag); })
于 2012-04-18T21:48:01.060 回答