我目前在扩展ObserableArray对象时遇到问题,因此它们具有额外的可观察属性。
我想做的是这样的事情:
ko.utils.arrayForEach(MyKnockoutManager.GetByModelKeyName('Catalog'), function (CatalogItem) { CatalogItem.IsSelected = ko.observable(false); });
然而,当然情况并非如此。
有没有办法将observables添加到obserableArray的对象?
答案 0 :(得分: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);
});