深度可观察和foreach模板

时间:2011-09-13 14:37:56

标签: javascript knockout.js

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

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渲染一个空项目,这是错误的。

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

1 个答案:

答案 0 :(得分:3)

您可以通过编写如下所示的绑定来保护自己免于触及未定义的属性:

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

否则,您可以将此问题推送到视图模型并创建一个dependentObservable,如:

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