挖空JS只使复杂对象数组的一个属性可观察
本文关键字:一个 属性 观察 JS 复杂 数组 对象 挖空 | 更新日期: 2023-09-27 18:31:12
我正在使用$.getJson从服务器调用(C#)构建一个observableArray。我的数组是从复杂对象列表构建的。复杂对象具有简单属性和数组属性。我只想使对象的一个属性(布尔值)可观察,但我仍然希望能够从 UI 访问其他属性(但是其他属性不会更改,所以我不希望它们可观察)。 目前,我只是从服务器获得的数据中填充我的可观察数组。有没有办法只创建该属性的可观察量???
function viewModel()
{
var self = this;
self.documents = ko.observableArray();
$.getJSON("/getdocuments", function (data) {
return self.documents(data);
});
}
ko.applyBindings(new viewModel());
你可以
这样做:
添加单独的对象构造函数,该函数将使用所需的可观察属性构建每个对象:
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 ); }
正如 Nikolay 所说,除了我使用这个函数作为我的数组的管道。
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 );
}