Knockout foreach observableArray似乎不适用于对象数组

时间:2016-01-20 05:55:58

标签: knockout.js

我不确定为什么我的foreach部分不起作用?第一个数据绑定文本:Id正在工作。

淘汰赛:

import Knockout from 'knockout';

function ViewModel() {
    var self = this;
    self.Id = ko.observable();
    self.Sections = ko.observableArray();
};

var viewModel = new ViewModel();

ko.applyBindings(viewModel);

$.getJSON("/api/projects/3455", function(data) {
    console.log(data);
    viewModel.Id(data.Id);
    viewModel.Sections(data.Sections);
});

HTML:

<div data-bind="text: Id">
    <div data-bind="foreach: Sections">
        <div data-bind="text: Id"></div>  
    </div>
</div>

返回JSON:

enter image description here

1 个答案:

答案 0 :(得分:3)

问题在于您的html中第一个text绑定,因为它会替换您的顶级div元素的整个内容,而您将失去您的foreach。

所以你需要在顶部div中移动文本绑定:

<div>
    <div data-bind="text: Id"></div>
    <div data-bind="foreach: Sections">
        <div data-bind="text: Id"></div>  
    </div>
</div>

如果您不想使用额外的div

,请使用无容器绑定语法
<div>
    <!-- ko text: Id --><!-- /ko -->
    <div data-bind="foreach: Sections">
        <div data-bind="text: Id"></div>  
    </div>
</div>