Javascript KnockoutJS嵌套映射
我正在使用KnockoutJS和映射插件来创建用户界面。当页面加载时,它会立即调用:Javascript KnockoutJS嵌套映射,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我正在使用KnockoutJS和映射插件来创建用户界面。当页面加载时,它会立即调用: $('document').ready ( function () { $.getJSON(some-url, function (data) { viewModel = new ViewModel(data); ko.applyBindings(viewModel); }); }); 这很有效。位于某个url的服务使用以下格式的JSON值进行响应: { current: null ,
$('document').ready ( function () {
$.getJSON(some-url, function (data) {
viewModel = new ViewModel(data);
ko.applyBindings(viewModel);
});
});
这很有效。位于某个url的服务使用以下格式的JSON值进行响应:
{ current: null
, ids: [0,1,2,3,4,5]
}
我在我的ViewModel类中创建了一个方法,该方法应该基于数组中的第一个id填充当前可观察对象:
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
observable?我只想解析ajax查询的响应,并将其作为子viewModel。我认为:
self.current(ko.mapping.fromJS(data));
当我这样做时,我最终不得不在self.current之后加上括号来访问子对象的字段:self.current().foo()。这会奏效,但我想知道是否有更好的办法。