Knockout双向绑定嵌套数组

问题描述:

我有麻烦得到绑定工作的嵌套数组。当页面第一次加载时,这些值显示正确,但是当我进行编辑时,绑定对象不会更新。Knockout双向绑定嵌套数组

我在这里创建了一个jsfiddle:http://jsfiddle.net/coverbeck/qCzT6/1/

我的HTML是这样的:

<body> 
    <ul> 
<!-- ko foreach: {data: cities, as: 'city'} --> 
     <li> 
      <input data-bind="value: city.name"/> 
      <span data-bind="text: city.name"></span> 
     </li> 
    <ul> 
    <!-- ko foreach: {data: neighborhoods, as: 'neighborhood'} --> 
     <li> 
      <input data-bind="value: neighborhood"/> 
      <span data-bind="text: neighborhood"></span> 
     </li> 
    <!-- /ko --> 
    </ul> 
<!-- /ko --> 
</ul> 
</body> 

我的JavaScript是:

var sf = {name: ko.observable('San Francisco'), 
      neighborhoods: ko.observableArray([ 
       ko.observable('Haight'), 
       ko.observable('Bayview'), 
       ko.observable('Marina') 
      ]) 
     }; 
var ny = {name: ko.observable('New York'), 
      neighborhoods: ko.observableArray([ 
       ko.observable('Hells Kitchen'), 
       ko.observable('Times Square') 
      ]) 
      }; 

var cities = ko.observableArray([sf, ny]); 
var viewModel = { cities: cities }; 
ko.applyBindings(viewModel); 

当我修改的城市名称,相应的span元素的更新。当我修改邻域名称时,相应的span元素不会更新。

我问了一个类似的问题已经here,答案奏效。我似乎再次遇到同样的问题,除了这次是一个嵌套数组,我看到了问题。我尝试了对嵌套数组的解决方案,但在这种情况下似乎没有什么区别。

感谢,

查尔斯

+0

人,你的代码格式是残酷的。你甚至可以阅读吗? – Tyrsius 2013-03-19 15:50:13

+0

“Atrocious”看起来有点苛刻,但我更新了格式。 – 2013-03-19 16:49:33

我不知道究竟在何处您的问题是从哪里来的,但它可以解决这样的:

var ny = {name: ko.observable('New York'), 
      neighborhoods: ko.observableArray([ 
       new neighborhood('Hells Kitchen'), 
       new neighborhood('Times Square')])}; 

function neighborhood(name) { 
    this.name = ko.observable(name); 
} 

然后你绑定的foreach neighborhoods然后绑定到name。问题可能是它不喜欢没有名字的观测值?

工作fiddle here