Mon application Backbone communique avec une API qui existe sur un autre serveur. Backbone.sync
générera des URL relatives par défaut. La façon la plus simple de faire précéder le chemin d'accès absolu du serveur serait quelque chose comme ce qui suit :
MyApp.BASE_URL = "https://api.someOtherSite.com"
class MyApp.Model extends Backbone.Model
urlRoot: "#{MyApp.BASE_URL}/my_app_url"
Cependant, je préfère ne pas le faire car ce n'est pas DRY. J'ai pensé que je pourrais essayer quelque chose comme ce qui suit en remplaçant 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
Toutefois, cela pose un problème pour d'autres parties du code, comme l'élément options
passe partout. *(explication pour les intéressés en bas de page)
Existe-t-il un moyen propre et pratique de faire précéder le chemin d'accès au serveur de toutes les URL générées par l'application Backbone.sync
?
*Si le model
qui est synchronisé est une instance de Backbone.Collection
ce options
sera transmis au constructeur du modèle de la collection. L'URL est l'une des rares propriétés qui sera directement attachée à un modèle si elle est transmise en tant que partie de l'attribut options
objet. T sync
pour tous les modèles qui sont créés dans une collection, car ils ont maintenant un ensemble d'URL attaché à eux au lieu d'une url
qui génère une url appropriée en utilisant urlRoot
ou de la collection url
.