我正在使用Knockoutjs并且在子模型中访问根/父模型数据时遇到问题。我通过Ajax获得的数据。
Ajax的成功创建了一个新的WeekViewModel,这会创建一些RowViewModel。这是我的问题,此时week
未定义。
渲染网站后,我可以通过week
获取信息
我发现的唯一解决方案是将父节点和根节点粘贴到子模型中。
但这种方法效果不是很好,因为在初始化时,父级是一个普通的js Obeject。渲染网站后,我将从click事件粘贴另一个rowViewModel,父级是一个淘汰对象。
任何人都可以给我一些建议,我发错了吗?或者是什么方法来解决这个问题?!
这是我的代码:
$(function() {
var week;
var weekData;
$.when(
$.get('js/dataNew.json', function (res) {
weekData = res;
}),
// another calls ...
).then(function () {
week = new WeekViewModel(weekData);
ko.applyBindings(week, $('#content').get(0));
});
function WeekViewModel(data){
var self = this;
var mapping = {
'Rows': {
create: function(options) {
return new RowViewModel(options.data, self);
}
}
};
this.allDays = allDays;
this.cats = new ko.observableDictionary();
// more code ...
ko.mapping.fromJS(data, mapping, this);
};
function RowViewModel(row, parent){
var self = this;
var mapping = {
'RowDays': {
create: function(options) {
return new DayModel(options.data, self, parent);
}
}
};
if(row){
if(!row.DisplayName) {
// need data from the root here
// parent.cats <---
}
}
// more code ...
ko.mapping.fromJS(row, mapping, this);
}
// another submodel ...
});
更新:
小提琴:
http://jsfiddle.net/LkqTU/23750/
用html更新小提琴:
http://jsfiddle.net/LkqTU/23753/