我使用KnockoutJS和映射插件来创建用户界面。页面加载时,会立即调用:
$('document').ready ( function () {
$.getJSON(some-url, function (data) {
viewModel = new ViewModel(data);
ko.applyBindings(viewModel);
});
});
这很有效。 some-url上的服务使用以下格式的JSON值进行响应:
{ current: null
, ids: [0,1,2,3,4,5]
}
我在我的ViewModel类中创建了一个方法,它应该根据数组中的第一个id来填充当前的observable:
self.head = function () {
if (self.promptIds().length != 0) {
var nextId = _.head(self.promptIds());
self.promptIds(_.tail(self.promptIds()));
$.getJSON("some-url" + "/" + nextId, function (data) {
self.current = ko.mapping.fromJS(data);
});
}
}
请注意,我将self.current
设置为等于执行ko.mapping的结果。所以我几乎覆盖了之前的观察点。这就解释了为什么我的绑定没有更新,即使定义了self.current
。
那么我该如何更新viewModel.current
可观察对象呢?我想要的只是解析ajax查询的响应并使其成为子视图模型。
答案 0 :(得分:2)
我想:
self.current(ko.mapping.fromJS(data));