2013-03-19 103 views
2

我有麻煩得到綁定工作的嵌套數組。當頁面第一次加載時,這些值顯示正確,但是當我進行編輯時,綁定對象不會更新。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

回答

2

我不知道究竟在何處您的問題是從哪裏來的,但它可以解決這樣的:

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