2012-04-01 70 views
4

我想知道是否有人有关于在屏幕上填充多个视图模型的建议。我有:KnockoutJS使用Ajax填充多个视图模型的最佳实践

一),有任务

二)有用户

的名单我在2×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成功调用。

我希望我的问题清晰简洁。如果需要,请询问更多细节。

问候 菲尔

回答

4

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

我们开始时按照您的要求进行了两次调用,但是决定减少正在生成的http请求的数量会更好,这就是为什么我们将数据集合到单个分层对象结构中,并且它工作得很好。

这个问题,并在随后的回答包含我们采取的办法的一个片段: Map JSON data to Knockout observableArray with specific view model type

3

只要你不发现性能问题,我建议在做单独的呼叫,因为这将让您的服务松耦合与您的演示文稿需求。

但是,如果它的perf问题,您可以使您的Web服务聚合数据并一次返回。但是你由此失去了一点可维护性。

+1

我同意你的观点,模块化你的服务是件好事。我们也这样做。但是,我们还创建组合服务,调用模块化服务,然后将多个服务结果捆绑在一起,从而生成一个对象,该对象可以在单个调用中返回,也适用于消费者(本例中为视图)。看到这里:http://soapatterns.org/ – KodeKreachor 2012-04-01 22:14:38

+0

我们的方法还确保了非常高的可维护性和坚持单一责任原则。 – KodeKreachor 2012-04-01 22:15:54

+0

我同意制作一个“复合”网络服务(或者我称之为聚合网络服务)的作品很好。这不是一个坏的解决方案,我自己做了。但我经常不添加额外的服务,除非我看到需要。通常由于性能问题或因为我会重复使用它。我只是列出了菲尔 – 2012-04-01 22:17:33