2011-05-31 17 views
7

Backbone configura la URL de una vez para cuando se crea una colección. ¿Hay alguna manera de cambiar esta url más tarde?Usar la URL dinámica para Backbone Collection

El siguiente ejemplo muestra 2 POST en /product y 2 POST en /product/id/stock. La última POST no funcionará, Backbone concatenará la identificación e intentará PUT, pero no sé por qué.

products.create({ name: 'American Pastoral', price: 8 }); 
products.create({ name: 'The Grapes of Wrath', price: 10 }); 

products.each(function(product) { 
    var id = parseInt(product.get('id')); 
    stocks.setId(id); 
    stocks.create({ id: id, quantity: 12 }); 
} 

La colección de:

Backbone.Collection.extend({ 
    url: function() { 
     return this.url; 
    }, 
    parse : function(resp) { 
     return resp.stock; 
    }, 
    setProduct: function(id) { 
     this.url = '/product/'+id+'/stock'; 
    } 
}); 

Este voluntad no trabajo.

+0

Ver http://stackoverflow.com/a/17361421/1039488 – guyaloni

Respuesta

6

Backbone.js utilizará la url del modelo al guardar los modelos existentes. No está muy claro lo que estás tratando de hacer, no sé qué acciones, por ejemplo. De todos modos, su código, probablemente, tiene que ser similar a la de abajo y no se debe cambiar dinámicamente la url:

Product = Backbone.Model.extend({ 

    url: function() { 
     return '/product/' + id + '/stock'; 
    } 

}); 

ProductList = Backbone.Collection.extend({ 

    model: Product, 

    url: '/product' 

}): 

Backbone.js utilizará entonces url colección para crea y la url modelo para salva. Creo que debes dejar la URL sola y dejar que la funcionalidad predeterminada de backbone la maneje.

3

Me he encontrado con lo que es esencialmente el mismo problema. Parece que el patrón de Backbone es bloquear URI relativos en modelos y colecciones y permitir que el framework los use para construir el URI final para un recurso dado. Esto es ideal para las plantillas de Restful URI que no cambian. Pero en un servicio RESTful puro, se esperaría que las listas de URI relativos cayeran como parte de un recurso determinado. Hay muchas razones por las que podría necesitar hacer esto, obvio es si el URI de un recurso se mueve.

Por lo que puedo decir, Backbone no tiene forma de manejar esto con facilidad. En la pregunta anterior, mi solución es esencialmente redefinir el método de la URL de modelos utilizando OLN. Haría esto mientras buscaba una colección o la inicializaba por primera vez. Básicamente construya la lógica para manejar las listas de URI usted mismo.

2

Sé que esta es una pregunta antigua, pero me llevó un poco determinar cómo resolverla por mi problema. En el manual bajo la operación de extracción no es este dato:

jQuery.ajax options can also be passed directly as fetch options, so to fetch a specific page of a paginated collection: Documents.fetch({data: {page: 3}}) 

El objeto que se pasa al parámetro de datos se añade como un URL GET variable. Entonces, la URL se convertiría en URL? Page = 3 o URL? X = 1 & page = 3 si ya existían variables.