0

我目前在扩展我的 ObserableArray 对象时遇到问题,因此它们具有额外的 observables 属性。

我想做的是这样的:

ko.utils.arrayForEach(MyKnockoutManager.GetByModelKeyName('Catalog'),
            功能(目录项)
            {
                CatalogItem.IsSelected = ko.observable(false);
            });

然而,情况当然不是这样。

有什么方法可以将 observables 添加到 obserableArray 的对象中?

4

1 回答 1

1

要添加其他属性,您需要做的就是设置它 -

CatalogItem.IsSelected = ko.obsrevable(false);

这将像您想要的那样在对象上添加一个附加属性。如果您试图将它添加到每个对象上,那么为什么不在构造对象时添加它呢?

function catalogItemModel(item) {
    var self = this;
    self.Id = ko.observable(id);
    self.Name = ko.observable(name);
    self.someOtherPropertyLikeIsSelected = ko.observable(false);
}

var thisArray = ko.observableArray();
var thisData = [{ id: 1, name: 'Jim' }, { id: 2, name: 'Bob' }];

$.each(thisData, function (index, item) {
    new catalogItemModel(item);
});

使用模型可确保传入的所有可观察对象之间的一致性。您也可以使用原型在数据映射后添加函数,但我认为这不是您要寻找的。

编辑

我明白你所说的迭代项目以添加属性,但这并不是你想要采取的正确方向。如果您必须这样做,只需将您的代码调整为以下 -

var vm.CatalogItems = ko.observable(MyKnockoutManager.Items.slice());
ko.utils.arrayForEach(vm.CatalogItems(), function (CatalogItem) {
    CatalogItem.IsSelected = ko.observable(false);
});
于 2013-10-24T02:03:02.983 回答