挖空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());

挖空JS只使复杂对象数组的一个属性可观察

你可以

这样做:

  1. 添加单独的对象构造函数,该函数将使用所需的可观察属性构建每个对象:

    var ObjectModel = function(config) {
        this.prop1 = config.prop1;
        ...
        this.propO = ko.observable(config.propO);
    }
    
  2. 在成功中,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 );

}