underscore libreria findwhere empty chunk backbone javascript collections backbone.js json

javascript - libreria - Backbone: Crear una colección desde JSON



underscore empty object (3)

Estoy intentando cargar JSON (de json_encode de php) en una colección de Backbone JS. He simplificado el problema para:

var myJSON = ''[{ "id":"1","name":"some name","description":"hmmm"}]''; var myCollection = new MyCollection(myJSON, { view: this });

Y:

MyObject = Backbone.Model.extend({ id: null, name: null, description: null }); MyCollection = Backbone.Collection.extend({ model: MyObject, initialize: function (models,options) { } });

Error:

No se detectó TypeError: no se puede usar el operador ''in'' para buscar ''id'' en

Problema similar: Backbone: captura de colección desde el servidor

Mi JSON ciertamente parece estar en el formato correcto, ¿me falta algo obvio? He intentado usar simplemente id: "1" en lugar de "id" con el mismo resultado.


Olvidaste el hash por defaults en tu modelo.

MyObject = Backbone.Model.extend({ defaults: { id: null, name: null, description: null } });

Ver la documentation


Su JSON todavía está en formato de cadena. Pásalo a JSON.parse antes de asignarlo:

var myJSON = JSON.parse(''[{"id":1,"name":"some name","description":"hmmm"}]'');


así que tal vez me esté perdiendo el punto por completo, pero los problemas parecen ser las ''comillas simples'' alrededor de la matriz. Eso es esto:

var myJSON = ''[{ "id":"1","name":"some name","description":"hmmm"}]'';

debiera ser:

var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}];

Php, afik, no agrega las comillas simples, por lo que debería ser tan simple como cambiar una línea que dice:

$my_js = "var myJSON = ''" . json_encode($my_array_to_send)) . "'';";

a:

$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; ";