深度可观察对象和foreach模板

Deep observables and foreach templates

本文关键字:foreach 模板 对象 观察 深度      更新时间:2023-09-26

我有一个这样的视图模型:

function viewModel() {
   this.a = ko.observable();
}

在某些时候,我尝试这样做(其中m是我的viewModel):

m.a(new thing());
现在,我有一个这样的模板绑定:
<ul data-bind="template: { name: 't', foreach: a().b }"></ul>

但是它会在任何事情发生之前崩溃,因为a()最初是undefinednull。所以我尝试了这个变化:

<ul data-bind="template: { name: 't', foreach: a.b }"></ul>

但这是奇怪的,因为现在它不会崩溃,但呈现一个单一的空项目,使用模板t,这是错误的。

我在这里有点不知所措,我认为关键是我可以定义源(像这样),随着事情的变化,它只会更新的东西,但我只是得到错误(或什么都没有发生)我做错了什么?

你可以这样写你的绑定,以避免碰到未定义的属性:

<ul data-bind="template: { name: 't', foreach: a() ? a().b : [] }"></ul>

否则,你可以把这个关注点推到你的视图模型中,并创建一个dependentObservable:

viewModel.c = ko.dependentObservable(function() {
    return this.a() ? this.a().b : [];
}, viewModel);