要添加其他属性,您需要做的就是设置它 -
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);
});