我正在尝试做下一件事:
<div data-bind="foreach: { data: elementsVM.elementsList, as: 'element' }">
<div data-bind="with: new ElementViewModel(element).getElementDetailsByLang(langFilter)">
<h3 data-bind="html: ElementTitle"></h3>
</div>
</div>
问题在于,当调用with: new ElementViewModel(element).getElementDetailsByLang(langFilter)
时,element
作为ElementViewModel(Element)
的参数结束,它是来自foreach绑定(elementsVM.elementsList
)的整个集合,而不是来自foreach迭代的当前元素。
elementsVM是一个ElementsViewModel:
function ElementsViewModel() {
var self = this;
self.ElementsList = ko.observableArray();
self.getElementsForCategory = function(categoryId) {
[...]
}
}
ElementViewModel看起来像这样:
function ElementViewModel(Element) {
var self = this;
self.ElementModel = new ElementModel(Element);
self.getElementDetailsByLang = function (lang) {
return ko.computed(function () {
[...]
}
}
}
答案 0 :(得分:1)
当你这样做时会发生什么:
<div data-bind="foreach: { data: elementsVM.elementsList }">
<div data-bind="with: new ElementViewModel($data).getElementDetailsByLang(langFilter)">
<h3 data-bind="html: ElementTitle"></h3>
</div>
</div>
您的替代方法是使用custom binding,如果这不起作用。