我不知道我的理解内部Knockout.js遵循工作流程。 我有一个是动态定义的,使用映射插件一个ViewModel。 它的形状是:
{ current: { foo: 'foo', bar: 'bar', id: 0 }
, ids: [1,2,3,4,5]
}
每个那些ids
对应于可在所属的值current
。 现在,并发症进来,因为在最初的ajax请求来填充我的视图模型,服务器响应current: null
。 我已经写代码,以第一id
出的列表中ids
和运行另一个AJAX查询来填充current
。 这看起来是这样的:
var ViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.head = function () {
if (self.promptIds().length != 0) {
var nextId = _.head(self.promptIds());
self.promptIds(_.tail(self.promptIds()));
$.getJSON("my-url" + "/" + nextId, function (data) {
self.current(ko.mapping.fromJS(data));
});
}
}
}
$('document').ready ( function () {
$.getJSON("view-model-route", function (data) {
viewModel = new ViewModel(data);
viewModel.head();
ko.applyBindings(viewModel);
});
});
请注意,在第二块,我创建了一个新的ViewModel
对象,我叫head()
就可以了。 一旦viewModel.current()
对象填充,我叫ko.applyBindings
的完整viewModel
。 我可以证实,当所有的尘埃落定, viewModel.current
不null
。 但我仍然得到错误:
Uncaught TypeError: Unable to parse bindings.
Bindings value: text: current().foo
Message: Cannot read property 'foo' of null
上午我试图做一些淘汰赛并不是用来做什么? 我需要另一个抽象层? 你会如何处理这个情况呢?