【问题标题】:Knockout foreach observableArray seems to not for array of objects淘汰赛 foreach observableArray 似乎不适用于对象数组
【发布时间】:2016-01-20 05:55:58
【问题描述】:

我不确定为什么我的 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:

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    问题在于您的 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>
    

    【讨论】:

    • 哦,很好看,这是问题帖子中不可预测的视图代码。但是,即使我也预料到您建议的行为,似乎 withwithout 顶级 Id 内容被覆盖。对此有什么想法吗?
    • @Jeroen 最初在您的 ID 中拥有什么并不重要。 KO 文本绑定“使用您的参数值将元素的内容设置为文本节点。之前的任何内容都将被覆盖。”所以当你调用ko.applyBindings时,内部元素会丢失
    • 啊,是的,你是对的,我没有正确解释我自己的例子。我的坏!
    • s/loose/lose/
    猜你喜欢
    • 2014-08-05
    • 2013-03-30
    • 1970-01-01
    • 2014-01-30
    • 2013-03-08
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多