对于单页应用程序,我需要同时使用多个 ViewModel,但似乎无法从另一个的计算属性中访问不同的 ViewModel。
一个(极其简化的)示例是:(http://jsfiddle.net/5t2tb/14/)
html:
<div data-bind="foreach: Search.results">
<a data-bind="text: id, css: { IsInBookshelf: IsInBookshelf() }"></a>
</div>
javascript:
var ViewModels = {
Search: new SearchViewModel()
};
function SearchViewModel() {
this.results = ko.observableArray([new Book(123), new Book(456)]);
}
function Book(id) {
this.id = ko.observable(id);
this.IsInBookshelf = ko.computed(function () {
alert(ViewModels);
return id%2==0;
}, this);
}
ko.applyBindings(ViewModels);
风格
.IsInBookshelf {
background-color: yellow;
}
我无法弄清楚为什么计算方法 IsInBookshelf 中的 var ViewModels 未定义,因为它应该是一个全局变量。