Pregunta

Cuando me fetch o modelos de las colecciones desde el servidor, no soy capaz de acceder a las propiedades del modelo, a menos que me stringify, a continuación, volver a analizar.Es de suponer que los mismos modelos tienen algunos sobrecarga adicional de backbone.js?Tenga en cuenta que en el código de abajo, puedo realizar stringify/analizar de forma secuencial, que se supone que debe dar el mismo resultado que empecé.Sin embargo, claramente me han matado algunos superfluo información mediante la realización de estos dos pasos, ya que mis propiedades del modelo que ahora se exponen de manera diferente de los de antes.Seguramente no necesito ir a través de estos dos pasos para acceder a mi modelo de propiedades, haga?

Eg.  
thismodel = /// assume this came from server fetch
alert(thismodel.name);    // DOES NOT WORK - undefined

jsonmodel = JSON.stringify(thismodel);
var providerprefslistJSON = jQuery.parseJSON(jsonmodel);
alert(providerprefslistJSON.name);     // WORKS
¿Fue útil?

Solución

Los objetos del modelo de columna vertebral no son los viejos objetos de JavaScript.Mantienen sus atributos en un hash interno .Para acceder al atributo name, puede hacer esto:

alert(thismodel.attributes.name);

o mejor aún usa el método GET () :

alert(thismodel.get("name"));

La razón por la que funciona cuando convierte el modelo a JSON y luego de nuevo es porque GeneracDicetArgCode llama el tojson ()MÉTODO , que crea una cadena JSON de Los atributos internos HASH , lo que significa que cuando se analiza esa cadena, obtiene un objeto de JavaScript de antiguo antiguo, que no es lo mismo que un objeto modelo backbone.

Otros consejos

En primer lugar, están tratando de obtener acceso a la propiedad de la modelo o la respuesta?

De alert(thismodel.name) parece que usted va para una propiedad de la modelo no es el atributo.Si usted está buscando el modelo de atributo, entonces tal vez usted quiere alert(this.model.get('name'))

Si usted está, de hecho, va para el modelo.nombre, entonces, básicamente, el problema puede estar en cómo está el análisis de los datos.Digamos, por ejemplo, el JSON de tu servidor es como este {'nombre':'Jimmy'}.

Mientras que el model.response la cruda JSON enviado ha "Jimmy" nombres de espacios en el objeto.nombre de columna vertebral automáticamente tomar eso y convertirlo en un modelo de atributo a menos que se indique lo contrario (por ejemplo,modelObj.los atributos.nombre), punto en el que desea utilizar el get() la función.

Usted debe ser capaz de modelo de acceso a datos de una manera bastante simple si todo funciona.

E. g.Fetch

var model = new MyModel();
    model.id = 1;
    model.fetch({
        success: function(model, response) {
            console.log(model.get('name'));  // The model name attribute
            console.log(response.name);  // The RAW response name property
        }
    });

O tal vez el servidor no envía los datos como los datos JSON.Es la respuesta del servidor content-type="application/json" ?

Algunas cosas para ver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top