2012-11-06 89 views
2

比方说,我有这样的事情在KnockoutjsKnockout JS嵌套数组。添加项目到子阵列

<pre data-bind="text: ko.toJSON($data, null, 2)"> 
{ 
    "people":[ 
     { 
      "name":"Thor", 
      "meta":[] 
     }, 
     { 
      "name":"Hulk", 
      "meta":[] 
     } 
    ] 
} 
</pre> 

的Javascript会是这样的:

function SuperheroViewModel() { 
    var self = this; 
    self.people = ko.observableArray(); 
    self.people.meta = ko.observableArray(); 

    self.people.push(new Person({name: 'Thor'})); 
    //self.people.push(new Person({name: 'Hulk'})); 

    self.addHero= function() { 
     self.people.push(
      new Person({ 
       name: 'Wolverine' 
      }) 
     ); 

     //self.meta.push(new Meta({sex: 'male'}); 
    } 
} 

ko.applyBindings(new SuperheroViewModel()); 
​ 

HTML

<button data-bind="click: addHero">Add Hero With Meta</button> 

是否有可能在“Thor”或“Hulk”下添加一个“meta”?

当插入新父项时,我首先想添加“元”。第二步是为目标“英雄”添加元。

回答

1

如果您在person的范围内调用addMeta,则KO会将当前数据项作为第一个参数传递给您的函数。

所以,你可以在你的处理程序中调用item.meta.push

+0

嗯,我有一个小提琴在这里:http://jsfiddle.net/wenbert/tRRxh/21/ - 我不能够添加元的父母。那将是我的第一步。第二步将为现有对象添加元。 – wenbert

+0

嗨,我已更新我原来的帖子,以反映小提琴。我希望现在更有意义。 – wenbert

+1

如果你要以这种方式创建你的Person,那么你需要构造函数将“元”数据传递给它的构造函数。由于它是一个元对象数组,因此您可能需要使用数组初始化它,或者创建一个空的observableArray并将其推入。示例:http://jsfiddle.net/rniemeyer/tRRxh/32/ –