2012-09-20 10 views
8

me gustaría a buscar el modelo de dirección URL específica con parámetros: url: servidor/somecontroller/id/type = regaloBackbone.js establecer parámetros de URL en el modelo y lo uso con traiga

forma de trabajo simple es:

collection.fetch({ data: { type: 'gift'} }); 

Pero quiero ponerlo en el modelo:

... 
    if(id){ 
     App.coupon = new AffiliatesApp.Coupon({id: id}); 
    } else { 
     App.coupon = new AffiliatesApp.Coupon({id: 'somecontroller'}, {type: 'gift'}); 
    } 
    App.coupon.fetch(); 

¿Cómo puedo lograrlo?

Respuesta

8

La manera más fácil de lograr esto es anulando el método url de Backbone en el modelo de cupón con uno definido por usted. Por ejemplo, usted puede hacer:

Affiliates.Coupon = Backbone.Model.extend({ 
    urlRoot : "server/somecontroller/", 
    url : function(){ 
    var url = this.urlRoot + this.id; 
    if(this.get("type")){ 
     url = url + "/?type=" + this.get("type"); 
    } 
    return url; 
    } 
}); 

Esta solución es fácil de implementar, pero tiene un inconveniente: la URL generada será utilizada para cada acción que se sincroniza con el servidor (buscar, guardar, ..).

Si necesita tener un control más preciso sobre la generación de la URL, dependiendo de qué acción esté haciendo, deberá anular el método Sync de Backbone para su modelo.

0

Se puede hacer sobrescribiendo el método fetch en el modelo para usar algunos datos personalizados. El uso de CoffeeScript que podría tener este aspecto:

class AffiliatesApp.Coupon extends Backbone.Model 
    fetch: -> 
    super(data: { type: @get('type') }) 

Tenga en cuenta que este ejemplo ignorará cualquier atributos pasados ​​a coupon.fetch(), sin embargo, se puede ajustar fácilmente para cualquier lógica de anulación.

Cuestiones relacionadas