gpt4 book ai didi

javascript - knockout . foreach 一个 child 的 child 不工作

转载 作者:行者123 更新时间:2023-11-28 02:36:45 25 4
gpt4 key购买 nike

我在使用 knockout 迭代 json 数据时遇到问题。我的 View 模型如下所示:

var ViewModel = function () {
var self = this;
self.Summary = ko.observableArray();
$.getJSON('some api url', function(result) {
ko.mapping.fromJS(result, {}, self);
});
}
ko.applyBindings(new ViewModel());

我的 JSON 数据如下所示:

{
Summary: {
Details: [
{
Name: "Foo",
Id: 1,
Detail: "Some Data"
},
{
Name: "Bar",
Id: 2,
Detail: "Another Data"
}
],
SummaryOverview: "BlahBlah",
AnotherObject: [
{
Name: "My Name"
AnotherChildObject: [
{
name:"some name"
}
]
}
]
}

}我的问题是我是否以这种方式迭代我的数据:

<div data-bind="foreach: Summary">             
<div data-bind="text: Details.Detail"></div>
</div>

<div data-bind: "foreach: Summary.Details">
<div data-bind="text: Detail"></div>
</div>

如何显示详细信息?上面的 HTML 不适合我。非常感谢!!

最佳答案

ko.mapping 的问题是您的可观察量将被新的可观察量替换。澄清一下,Summary 是一个 observableArray,将被 ko.mapping 替换为新的 observableArray。

有两种方法可以解决这个问题。第一种选择是等待 applyBindings 直到创建真正的数组:

var ViewModel = function () {
var self = this;
// no need to set the array, it will be overwritten anyway
// self.Summary = ko.observableArray();
}

var vm = new ViewModel();
$.getJSON('some api url', function(result) {
ko.mapping.fromJS(result, {}, vm);
ko.applyBindings(vm);
});

替代方案 2 是使用初始(空)数据引导 View 模型。如果您在空数组上应用 ko.mapping ,则下次调用 ko.mapping 时将更新现有数组而不是覆盖它。就像这样:

var ViewModel = function () {
var self = this;
var init = { Summary: [] };
ko.mapping.fromJS(init, {}, self);

$.getJSON('some api url', function(result) {
ko.mapping.fromJS(result, {}, self);
});
}

ko.applyBindings(new ViewModel());

我通常选择替代方案 2。替代方案 1 会在调用 ko.applyBindings 之前导致延迟,这可能会导致一些 UI 闪烁(并且可能会看到不需要的元素等)。

关于javascript - knockout . foreach 一个 child 的 child 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com