【问题标题】:Knockout: nested Elements as observable淘汰赛:嵌套元素为可观察的
【发布时间】:2014-06-08 04:07:19
【问题描述】:

我正在尝试使用 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/

是否有可能通过淘汰赛做到这一点?

感谢您的帮助!

【问题讨论】:

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


【解决方案1】:

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

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

映射插件是自动化数据序列化和反序列化的好主意...如果您可以选择手动初始化数据集,这并不总是必要的...无论如何这是一个好习惯。

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 2012-07-07
    • 2014-11-05
    • 2012-09-08
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多