KnockoutJS嵌套映射

时间:2014-06-02 06:53:37

标签: javascript knockout.js knockout-mapping-plugin

我使用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查询的响应并使其成为子视图模型。

1 个答案:

答案 0 :(得分:2)

我想:

self.current(ko.mapping.fromJS(data));