Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2014, 09:14
Avatar de cristian_cena
cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 10 meses
Puntos: 269
Backbonejs: ¿Como pasar una colección a un template?

Hola, contarles que estoy trabajando con backbone y django rest framework

Una vez creada la api rest y ya con datos en el servidor, creo el modelo y la coleccion backbone:
Código Javascript:
Ver original
  1. var Contact = Backbone.Model.extend();
  2. var Contacts = Backbone.Collection.extend({
  3.     url: '/api/contacts/', //en esta url esta la api rest  
  4.     model: Contact
  5. });
Hasta acá todo bien, el problema viene cuando intento pasar la coleccion al template por medio de una vista:
Código Javascript:
Ver original
  1. var ContactView = Backbone.View.extend({
  2.     initialize : function () {
  3.         this.render();
  4.     },
  5.     render: function(){
  6.         var c = new Contacts();
  7.         var datos;
  8.         var data = c.fetch({
  9.             success: function (model, resp){
  10.                 console.log(model); //child {length: 5, models: Array[5], _byId: Object, constructor: function, url: "/api/contacts/"…}
  11.                 console.log(resp);  //[Object, Object, Object, Object, Object]
  12.                 datos = resp
  13.                 console.log(datos); //[Object, Object, Object, Object, Object]
  14.             },
  15.             error: function (model, resp){
  16.                 console.log("error");
  17.             }
  18.         });
  19.        
  20.         //var data = c.fetch();
  21.         //console.log(data.toJSON()); //[ ] un maldito arreglo vacío.
  22.  
  23.         console.log(data);  //Object {readyState: 1, responseJSON: Array[5], responseText: "[{"url": "http://localhost:8000/api/contacts/1/", "id": 1, "first_name": "Alice", "last_name": "Arten", "phone_number": "555-0184"}, {"url": "http://localhost:8000/api/contacts/2/", "id": 2, "first_name": "Bob", "last_name": "Brigham", "phone_number": "555-0163"}, {"url": "http://localhost:8000/api/contacts/3/", "id": 3, "first_name": "Charlie", "last_name": "Campbell", "phone_number": "555-0129"}, {"url": "http://localhost:8000/api/contacts/4/", "id": 4, "first_name": "Vic", "last_name": "Vil", "phone_number": "999-3659"}, {"url": "http://localhost:8000/api/contacts/5/", "id": 5, "first_name": "chango", "last_name": "cena", "phone_number": "123-4567"}]"}
  24.         console.log(datos);   //undefined  
  25.  
  26.         var template = _.template( $("#lista_template").html(), data);  //Aqui data debería ser [Object, Object, Object, Object, Object]
  27.         this.$el.html( template );
  28.     }
  29. });
Como se puede observar, la variable data almacena:
  1. o "undefined"
  2. o un arreglo vacío
  3. o un objeto que tiene una propiedad llamada responseText y otra responseJSON (si llamo a estas con data.responseText lo que obtengo es nuevamente "undefined")

Pero lo que yo necesito es el array de objetos que devuelve el argumento resp del método success cuando hacemos fecth() a la colección.
¿Como puedo obtener dicho array?

Desde ya muchas gracias.
Saludos

Última edición por cristian_cena; 05/07/2014 a las 09:24