【问题标题】:KnockoutJS Nested MappingKnockoutJS 嵌套映射
【发布时间】:2014-06-02 06:53:37
【问题描述】:

我正在使用 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 的结果。所以我几乎覆盖了之前的 observable 。这就解释了为什么我的绑定没有更新,即使 self.current 已定义。

那么我该如何更新viewModel.current observable?我想要的只是解析 ajax 查询的响应并使其成为子视图模型。

【问题讨论】:

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


    【解决方案1】:

    我以为是:

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

    【讨论】:

    • 当我这样做时,我最终不得不在 self.current 后面加上括号来访问子对象的字段:self.current().foo()。这会起作用,但我想知道是否有更好的方法。
    猜你喜欢
    • 2015-03-07
    • 2012-12-26
    • 2013-11-15
    • 2020-01-27
    • 2020-03-06
    • 1970-01-01
    • 2020-07-17
    • 2023-03-29
    • 2014-04-12
    相关资源
    最近更新 更多