Knockout.js作为新ViewModel的元素

时间:2013-01-24 09:55:52

标签: knockout.js

我正在尝试做下一件事:

<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 () {                
            [...]
        }
    }
}

1 个答案:

答案 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,如果这不起作用。