【问题标题】:KnockoutJS best practice to populate multiple view models using Ajax使用 Ajax 填充多个视图模型的 KnockoutJS 最佳实践
【发布时间】:2012-04-15 10:53:44
【问题描述】:

我想知道是否有人对在屏幕上填充多个视图模型有任何建议。我有:

a) 具有任务列表的视图模型

b) 具有用户列表的视图模型

我在 2 x ajax 成功(单独的 ajax 调用)中填充这些内容,例如:

success: function (data) {
    masterVM.User = ko.mapping.fromJS(data, mapping);
    ko.applyBindings(masterVM); 
}

/* another ajax call: */
success: function (data) {
    masterVM.Task = ko.mapping.fromJS(data, mapping);
    ko.applyBindings(masterVM); 
}

目前正在调用每个 ajax 成功调用。

我希望我的问题简洁明了。如果需要,请询问更多详细信息。

问候 菲尔

【问题讨论】:

    标签: ajax mapping knockout.js


    【解决方案1】:

    我们目前通过在单个 Ajax 调用中将所有数据发送到我们的页面来处理这个问题,然后应用 ko.mapping 将数据映射到我们主视图模型上的视图模型。

    我们开始像您一样进行两次调用,但决定最好减少发出的 http 请求的数量,这就是我们将数据集组合成一个分层对象结构的原因,而且效果很好。

    这个问题和随后的答案包含我们正在采用的方法的 sn-p: Map JSON data to Knockout observableArray with specific view model type

    【讨论】:

      【解决方案2】:

      只要您没有注意到性能问题,我建议您进行单独调用,因为这将使您的服务与您的演示需求保持松散耦合。

      但是,如果是性能问题,您可以让您的网络服务聚合数据并一次性返回。但是您会因此而失去一点可维护性。

      【讨论】:

      • 我同意你的观点,模块化你的服务是一件好事。我们也这样做。但是,我们还创建了组合服务,这些服务调用模块化服务,然后将多个服务结果捆绑在一起,从而生成一个可以在单个调用中返回的对象,并且也适合消费者(本例中的视图)范围。见这里:soapatterns.org
      • 我们的方法还确保了非常高水平的可维护性以及遵守单一职责原则。
      • 我同意制作“复合”Web 服务(或我称之为聚合 Web 服务)可以正常工作。这不是一个糟糕的解决方案,我自己已经完成了。但除非我看到需要,否则我通常不会添加额外的服务。通常是由于性能问题或因为我会重用它。我只是在为菲尔列出利弊
      • 公平地说,John,但非常尊重,如果我可以将我的页面每次被击中时需要发出的 http 请求数量减少一半,那么这足以让我创建复合材料。它很快就会收回成本;)
      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2011-01-23
      • 2011-04-08
      • 2012-07-22
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多