2012-10-04 153 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