2012-04-18 68 views
1

請參閱代碼(使用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()時,它的成功)

+1

如果'.pop()'工作,爲什麼不使用它? – 2012-04-18 11:21:50

+0

.pop()只能得到您輸入的最後一個項目嗎?我希望能夠刪除數組中的任何項目。 – 2012-04-18 12:34:15

+0

我明白了,你的權利,在這種情況下流行是行不通的。 – 2012-04-18 12:40:49

回答

3

你的標籤數組是普通數組,不是可觀察數組,它將沒有remove方法。

淘汰賽有正常的陣列

ko.utils.arrayRemoveItem(array, itemToRemove) 

,或者您可以使用拼接助手(實際上ko.utils.arrayRemoveItem使用拼接)

1

通常,您可以使用拼接從javascript數組中刪除項目。

Pop將不起作用,因爲它只會刪除上次插入的值。

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

如果需要,您可以使用此操作。

敲除也有一些API的像array.remove(功能(){返回a.id === 1;}),其返回具有ID 1

EDIT所有元素: 作爲一個例子你可以看看這個JsFiddle http://jsfiddle.net/Ng39n/http://jsfiddle.net/Ng39n/

+0

當使用array.remove(function(a){return a.id === 1;});我仍然得到'Microsoft JScript運行時錯誤:對象不支持此屬性或方法';與我使用ko.utils.arrayMap有什麼關係嗎? – 2012-04-18 12:39:45

1

您可以將功能添加到您的視圖模型,removeTag,像如下:

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