我有一个这样的视图模型:
function viewModel() {
this.a = ko.observable();
}
在某些时候我尝试这样做(m
是我的viewModel
):
m.a(new thing());
现在,我有一个像这样的模板绑定:
<ul data-bind="template: { name: 't', foreach: a().b }"></ul>
但是在事情发生之前它会崩溃,因为a()
最初是undefined
或null
。所以我尝试了这种变化:
<ul data-bind="template: { name: 't', foreach: a.b }"></ul>
但这很奇怪,因为现在它不会崩溃,而是使用模板t
渲染一个空项目,这是错误的。
我在这里有点不知所措,我认为关键是我能够定义源(就像这样)并且随着事情的改变它只会更新东西但我只是得到错误(或者没有什么是发生了什么,我做错了什么?
答案 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);