我正在尝试使用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'}]
}
有没有可能用淘汰赛做到这一点?
感谢您的帮助!
答案 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));
映射插件对于自动化数据的序列化和反序列化是个好主意...如果您可以选择手动初始化数据集,那么这并不总是必要的......无论如何这都是很好的做法。