我正在使用$ .getJson从服务器调用(C#)构建observableArray。我的数组是从复杂对象列表构建的。复杂对象具有简单的属性和数组属性。我只想让我的对象的一个属性(布尔值)可观察,但我仍然希望能够从UI访问其他属性(但是其他属性不会改变所以我不希望它们是可观察的)。目前我只是从我从服务器获得的数据填充我的observableArray。有没有办法只创建一个属性的observable ???
function viewModel()
{
var self = this;
self.documents = ko.observableArray();
$.getJSON("/getdocuments", function (data) {
return self.documents(data);
});
}
ko.applyBindings(new viewModel());
答案 0 :(得分:1)
你可以这样做:
添加单个对象构造函数,该函数将使用您需要的observable属性构建每个对象:
var ObjectModel = function(config) {
this.prop1 = config.prop1;
...
this.propO = ko.observable(config.propO);
}
在你成功的ajax回调迭代对象配置你获得并将它们提供给该对象构造函数,然后添加到主视图模型中的数组:
$.getJSON("/getdocuments", function (data) {
var arr = [];
data.forEach(function(objectCfg){
arr.push( new ObjectModel(objectCfg) );
})
self.documents( arr );
}
答案 1 :(得分:0)
就像尼古拉说的那样,除了我用这个函数作为我阵列的管道。
var addProperty = function(inObject)
{
inObject.IsFav = ko.observable(inObject.IsFavorite);
return inObject;
}
$.getJSON("/getdocuments", function (data) {
var arr = [];
data.forEach(function(objectCfg){
arr.push( addProperty(objectCfg) );
})
self.documents( arr );
}