请参阅代码(在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()时,它成功了)
答案 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); })