Knockout JS只能对一个复杂的对象数组中的一个属性进行观察

时间:2016-01-19 17:28:55

标签: javascript c# arrays knockout.js

我正在使用$ .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());

2 个答案:

答案 0 :(得分:1)

你可以这样做:

  1. 添加单个对象构造函数,该函数将使用您需要的observable属性构建每个对象:

    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 );
    }
    

答案 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 );

}