gpt4 book ai didi

ajax - 如何从多个 URL 填充主干模型

转载 作者:行者123 更新时间:2023-12-03 23:54:28 27 4
gpt4 key购买 nike

我想使用由来自不同 URL 端点的数据组成的单个主干模型。是否可以在单个模型中指定多个 URL?我想避免手动调用 AJAX。

到目前为止,我一直在使用jQuery Deferreds调用多个 URL 并将它们的结果合成到一个对象中。

到目前为止,我可以想到两种选择:为每个 URL 构建一个带有部分模型的 Backbone 模型,或者使用一个 URL 然后覆盖 Model.fetch()调用其他 URL。但没有一个让我感到舒服。

(或者我可以尝试贿赂 API 开发人员以提供合并的 URL 端点......)

最佳答案

我认为你建议的两种方式都很合理,但我个人会投票给fetch。方法。

使用嵌套模型具有“开箱即用”的优势;换句话说,通过为每个服务器 <=> 客户端映射使用一个模型,您可以避免更改任何 Backbone.Model方法。但是,这种方法的问题在于您最终会得到多个模型的组合。

如果这仍然有意义(除了数据检索),那么坚持使用嵌套模型。但是,如果不是这样,您将强制其余代码使用多个模型,而不仅仅是一个模型,以保持您的数据检索代码简单。如果您只想使数据检索代码复杂化并保持其他一切简单,那么您最好覆盖fetch。 .
fetch做一件事,那就是通过数据与远程 URL 之间的一对一映射来检索数据。如果您想要一对一 许多映射而不是覆盖默认值 fetch 非常有意义行为。另外,您知道覆盖 fetch 是相当安全的。因为它的名字不是_fetch , Backbone 使用下划线样式来命名它的伪私有(private)方法(例如 _validate )。

如果您仍然不喜欢这两种方法中的任何一种,还有另一种选择:request事件。最新版本的 Backbone 有一个名为 request 的新事件。任何时候触发 fetch已启动。这意味着您可以设置一个事件处理程序来检索辅助数据以响应主数据的请求,如下所示:

Backbone.Model.extend({
initialize: function() {
this.on('request', this.handleRequest);
_.bindAll(this, 'handleTriggeredResponse');
},
handleRequest: function() {
$.ajax({url: secondDataUrl, complete: this.handleTriggeredResponse});
$.ajax({url: tertiaryDataUrl, complete: this.handleTriggeredResponse});
},
handleTriggeredResponse: function(response) {
this.set(response.data);
},
url: firstDataUrl
});

关于ajax - 如何从多个 URL 填充主干模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com