2012-10-04 155 views
2

我試圖在KnockoutJS中添加/從嵌套的observableArray中刪除。我有一個數組的幾個元素,每個元素都有一個屬性對象,一個類型對象和一個保存對象的attributeValue數組。所以它是一個嵌套數組。添加/刪除Knockout observableArray嵌套元素

allAttributes數組是observableArray。然後我試着通過用attributeValues創建一個新的ViewModel(attributeValueViewModel)爲ko.observableArray([])來使attributeValue數組具有可觀察性。

我做了兩個Knockout函數(這不起作用),我試圖添加/刪除/從該數組中的值。問題是數組嵌套,所以我必須通過this.attribute.id訪問attributeID。 self.allAttributes [I] .attributeValues [J]應該是我加入的對象/刪除...其中I =屬性ID和屬性值對象的J =指數

爲什麼不是那些工作職能?

這裏是我的小提琴:http://jsfiddle.net/M6Hqj/2/

+0

酷的故事。現在問題在哪裏? – RASG

+0

哈哈抱歉兄弟,功能不起作用。 :) – Gaui

回答

1

首先,你要覆蓋觀察到的功能在你的內心視圖模型,例如當您分配obj.attribute = item.attribute;時,您將覆蓋您的初始分配self.attribute = ko.observable(data.attribute);。相反,通過觀察到指定值,就像這樣:

obj.attribute(item.attribute); //instead of obj.attribute = item.attribute; 

這也會讓你的self.addAttributeValue()函數調用工作,因爲該數組是現在觀察到的。

接下來,在你的self.removeAttributeValue()功能,this調用實際上是指在特定的記錄attributeValues陣列,因此,當你做this.attributeValues.splice(),它不能找到你attributeValues對象的屬性。因此,功能轉移到attributeValueViewModel對象,並使用self代替this,就像這樣:

//This is inside function attributeValueViewModel(data) 
self.removeAttributeValue = function() { 
    alert(JSON.stringify(this)); 
    self.attributeValues.splice(this.id, 1); 
} 

稱呼它,只是改變你的數據綁定代碼來使用$parent代替$root,就像這樣:

<button data-bind="click: $parent.removeAttributeValue">REMOVE</button> 

事情是這樣的提琴在這裏:http://jsfiddle.net/UMB79/

(請注意,這些變化你還必須修改您的邏輯來正確添加/刪除eleme恩斯,因爲它仍然是越野車)

+0

非常感謝,非常感謝! – Gaui