Для одностраничного приложения мне нужно одновременно использовать несколько ViewModels, но не могу получить доступ к другому 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;
}
не могу фи вычтите, почему var ViewModels в вычисленном методе IsInBookshelf не определен, поскольку он должен быть глобальной переменной.
В противном случае вы можете использовать опцию 'deferEvaluation' для вычисляемого типа:' this.IsInBookShelf = ko.computed ({read: function() {// yourlogic}, deferEvaluation: true}, this); сделайте так, чтобы первая оценка не выполнялась до тех пор, пока кто-то фактически не обратится к ней. –
@ go-oleg: Действительно простая ошибка javascript, которую я сделал там ... Спасибо, что указали это, и простой способ исправить это! Идти! олег. ;) – Heras
@RP Niemeyer: Очень интересный другой подход, который мне нужно изучить. Благодаря! – Heras