2

我无法让绑定适用于嵌套数组。页面首次加载时值显示正确,但是当我进行编辑时,绑定对象不会更新。

我在这里创建了一个 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 元素不会更新。

我已经在这里问了一个类似的问题,并且答案有效。我似乎又遇到了同样的问题,除了这一次它是一个嵌套数组,我看到了这个问题。我尝试从该答案中针对嵌套数组进行修复,但在这种情况下似乎没有什么不同。

谢谢,

查尔斯

4

1 回答 1

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);
}

然后你绑定 foreachneighborhoods然后绑定到name. 问题可能是它不喜欢没有名字的可观察对象?

在这里工作小提琴

于 2013-03-19T15:48:46.913 回答