Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KnockoutJS嵌套映射_Javascript_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Javascript 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 ,

我正在使用KnockoutJS和映射插件来创建用户界面。当页面加载时,它会立即调用:

$('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()。这会奏效,但我想知道是否有更好的办法。