Knockout:嵌套元素为可观察的

时间:2014-04-23 11:03:38

标签: json knockout.js knockout-mapping-plugin observable

我正在尝试使用knockout.js构建一个复杂视图并遇到一些问题。 视图模型的内容数据通过ajax加载为JSON。 JSON非常复杂,并且有多个嵌套对象,其中一些应该是可观察的而另一些则不是。

这是一个小例子(真正的一个是更深层次)

{
        BaseData:{
            Title:'BaseDataTitle',
            DataArray:[{Title:'obs1'}],//this should be observable
            SecondArray:[{Title:'notobs1'}],//this should not be observable
        },
        DataArray:[{Title:'obs1'}]
    }

http://jsfiddle.net/wPs7e/

有没有可能用淘汰赛做到这一点?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你必须对你的对象做一些工作......你可以使用映射插件,但是你仍然需要创建一些对象来接收你的数据并有条件地应用绑定...

var KOObject = function(rawdata) {
    var self = this;
    self.BaseData = new BaseDataObject(rawdata.BaseData);
    self.DataArray = rawdata.DataArray; 
}

var BaseDataObject = function(baseData) {
    var self = this;
    self.Title = baseData.Title;
    // you could keep chaining the creation of objects with this concept
    self.DataArray = ko.observableArray(baseData.DataArray);
    self.SecondArray = ko.observableArray(baseData.SecondArray);
}

在应用绑定之前,新建这个对象

ko.applyBindings(new KOObject(rawdata));

映射插件对于自动化数据的序列化和反序列化是个好主意...如果您可以选择手动初始化数据集,那么这并不总是必要的......无论如何这都是很好的做法。