2011-12-05 12 views
16

Tengo una lista de elementos y al hacer clic en ellos debo poner los detalles del usuario en ella (otra vista). En mi router que tienen tal ruta para esto:buscar en el modelo de red troncal con id

'details/:id' : 'details', 

Ahora, en la explicación de cada función que debería buscar a mi objeto (Obtención desencadenará nueva representación de vista). Pero, ¿qué debo hacer para que la red troncal adjunte la identificación del elemento a model.url? 2 maneras que tengo por ahora es:

Crear url sobre la marcha cuando ir a buscar:

this.realty_object.fetch({url: SITE_PATH + 'blah/blah/' + id}); 

Y algo como esto:

this.realty_object 
    .set({id : id}, {silent: true}) 
    .fetch(); 

Pero no tengo dudas de que es soluciones adecuadas. ¿Como debería ser? Cuál es la diferencia entre model.urlRoot y model.url().

Respuesta

34

La respuesta correcta es usando UrlRoot propiedad del modelo. Si está configurado, el ID de modelo se agregará a esta url mientras se recupera. Por lo que puede tener este aspecto (los objetos tienen nombres diferentes de lo que es en mi primer post, pero la idea es la misma - traiga solo modelo por id):

Group = Backbone.Model.extend({ 
    urlRoot: SITE_PATH + 'group/index', 
}); 

Y en la ruta:

this.group = new Group({id: id}); 
this.group.fetch(); 
+2

Este es ok, a menos que desee mantener intacta la instancia del modelo, pero simplemente muévala entre los estados en blanco y los poblados (por ejemplo, un usuario conectado/desconectado). En ese caso, la mejor solución que puedo encontrar es el '.set' del OP del ID con' silent: true'. – SimplGy

+0

También debe pasar 'silent: true' al hash de opciones del constructor del modelo para evitar que el modelo se marque como sucio en fetch: ' this.group = new Group ({id: id}, {silent: true}) ; ' – Burgi

0

echar un vistazo por aquí, se explica perfectamente lo que una de las mejores soluciones es para ir a buscar modelos de un solo

que tendría que utilizar una función para la elaboración de la URL, como una propiedad del modelo. usando el .isNew() al menos así es como lo he estado haciendo por un tiempo, creo que es mejor que construir una url en la búsqueda cada vez que necesite algo.

How do I fetch a single model in Backbone?

Cuestiones relacionadas