【问题标题】:remove item from list, knockout.js从列表中删除项目,knockout.js
【发布时间】:2012-04-18 11:16:07
【问题描述】:

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

【问题讨论】:

  • 如果.pop() 有效,为什么不使用它?
  • .pop() 只获取您输入的最后一项,对吗?我希望能够删除数组中的任何项目。
  • 我明白了,你的权利,在这种情况下 pop 不起作用。

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


【解决方案1】:

你的 tags 数组是普通数组,不是 observable 数组,它不会有 remove 方法。

Knockout 有普通数组的助手

ko.utils.arrayRemoveItem(array, itemToRemove)

也可以使用splice(其实ko.utils.arrayRemoveItem使用splice)

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 在使用 array.remove(function(a){ return a.id === 1; }) 时,我仍然收到“Microsoft JScript 运行时错误:对象不支持此属性或方法” ;使用 ko.utils.arrayMap 和我有什么关系吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 2022-12-20
      • 2016-05-08
      • 2011-03-18
      • 2020-12-07
      • 2010-11-29
      • 2016-08-17
      相关资源
      最近更新 更多