我的 Backbone 应用程序与另一个服务器上存在的 API 通信。Backbone.sync
默认情况下会生成相对 URL。预先添加绝对服务器路径的最简单方法如下:
MyApp.BASE_URL = "https://api.someOtherSite.com"
class MyApp.Model extends Backbone.Model
urlRoot: "#{MyApp.BASE_URL}/my_app_url"
但是,我宁愿不这样做,因为它不是 DRY。我想我可以通过覆盖来尝试以下类似的事情Backbone.sync
:
do (Backbone) ->
BASE_URL = 'https://api.someOtherSite.com'
baseSync = Backbone.sync
Backbone.sync = (method, model, options) ->
url = _.result(model, 'url')
options.url = "#{BASE_URL}/#{url}" if url && !options.url
baseSync method, model, options
但是,这对于代码的其他部分来说是有问题的,因为options
对象会到处传递。*(有兴趣者在下方说明)
是否有推荐的干净和干燥的方法来将服务器路径添加到由生成的所有 URL 的前面Backbone.sync
?
*如果model
正在同步的是Backbone.Collection
这个options
对象的一个实例,将被传递给集合的模型构造函数。如果 URL 作为对象的一部分传入,则 URL 是直接附加到模型的少数属性之一options
。这对于在集合中创建的任何模型都会中断sync
,因为它们现在附加了一个设置的 URL,而不是url
通过使用urlRoot
或集合的url
.