2012-06-17 8 views
15

En la carga de la página Estoy cargando mis datos a mis colecciones a través del this technique. Eso funciona muy bien, pero me encuentro con un problema en el que tengo submodelos que también deben ser lanzados.backbone.js - utilizando el análisis sin llamar a la recuperación

Por ejemplo, devuelvo una colección JSON llamada Libro, y cada matriz de libros contiene entre 10 y 20 modelos denominados Páginas. Si intento acceder a Pages directamente, aparece el error [object][object] porque Backbone no puede determinar qué tipo de objeto es.

Anteriormente cuando estaba usando fetch, me gustaría evitar esto mediante el uso de colecciones que contenían una acción parse. En parse Me gustaría hacer algo como:

Collection_Books = Backbone.Collection.extend({ 
    model: Model_Book, 
    parse: function (response) { 
     response.Pages = new Collection_Pages(response.Pages); 
     return response; 
    } 
}); 

Ahora que estoy acceder a los datos directamente y no mediante fetch, de la documentación, que ya no tengo acceso al método parse.

Si no estoy usando fetch o llamando a un servidor en la carga de página, ¿cómo puedo lanzar submodelos utilizando el ejemplo de Libros> Páginas?

+0

Si está bien ajustando un poco su método constructor/initialize, ciertamente puede configurar modelos secundarios allí. Un poco más de detalle al final de esta publicación: http://bit.ly/KKHItJ – rjz

+0

Su enlace _this technique_ está roto – Madbreaks

Respuesta

11

Actualización: Esta respuesta está obsoleta, vea uglymunky's answer para obtener más información actualizada.


Tienes razón, es parseonly specified to be called during fetch por lo que no será llamada cuando está la construcción de una colección de datos en bruto.

Pero, puesto que permite controlar los datos en bruto que está utilizando para arrancar su colección, puede llamar parse a sí mismo de su colección:

var c = new YourCollection(
    YourCollection.prototype.parse([ 
     // attribute data goes here... 
    ]) 
); 

Demostración: http://jsfiddle.net/ambiguous/kdaZ3/

Sus parse métodos (ambos colección y modelo) no deberían preocuparse por el contexto de su llamada, por lo que llamarlos directamente desde el prototipo debería estar bien.

+1

Creo que esta es la tercera vez que me rescató con backbone.js. Te lo agradezco una vez más :) – boolean

56

No estoy seguro si esto es nuevo, pero parece que también puede simplemente establecer la propiedad parse del parámetro de opciones a su constructor a la verdadera, con lo que indica el constructor de usar el método de análisis:

modelInstance = new MyModel(obj, {parse: true}); 

http://backbonejs.org/#Model-constructor

+1

Nota: esto también funciona en el constructor de la colección, p. var books = new Collection_Books (json, {parse: true}); – Element

+2

Esta debería ser la respuesta aceptada ahora ... – Ben

+0

Este es un nuevo comportamiento, Backbone no tenía esta opción cuando se formuló la pregunta. Supongo que tendremos que esperar hasta que se cambie el "aceptar". –

Cuestiones relacionadas