Backbone.js fetch () JSON para modelar get () devuelve undefined

Básicamente quiero recuperar un archivo JSON y almacenarlo en un modelo. Sin embargo, cuando bash acceder a los atributos a través de get() este retorna como no definido. Así que digamos que el archivo JSON tiene una serie de juegos que consta de objetos con algunos atributos. Realmente no importa Solo quiero guardarlos en el modelo y acceder a ellos. Así que estoy haciendo algo como esto.

 var player = Backbone.Model.extend({ initialize: function(app, options) { this.app = app; var _this = this; this.fetch({ url: "someurl", success: function() { console.log("success"); } }); } }); var instplayer = new player(); instplayer.on('change', function(){ console.log(model); console.log(model.get(games)); }) 

Así que pensé que necesito un evento para asegurar que se llame a get() cuando los datos están realmente disponibles. Pero esto sigue volviendo indefinido. ¿Que necesito hacer?

Así que me imaginé que tienes un hijo para tu jugador así (me he burlado de él para que funcione el siguiente ejemplo):

 { "username": "joe", "games": [ { "title": "Pacman" }, { "title": "Super Mario" } ] } 

Y aquí hay un ejemplo completo de cómo manejaría la administración y la representación de este tipo de datos:

 var Game = Backbone.Model.extend({ defaults: { title: '' } }); var Games = Backbone.Collection.extend({ model: Game }); var Player = Backbone.Model.extend({ defaults: { username: '' }, url: 'http://www.mocky.io/v2/56261127250000a01accb34f', initialize: function(){ this.games = new Games(); this.listenTo( this, "sync", this.initGames ); this.fetch(); }, initGames: function(){ this.games.add( this.get('games') ); this.trigger('ready', this); } }); var PlayerView = Backbone.View.extend({ template: _.template('

<%=username%>

and his games:
    '), render: function(){ this.$el.html( this.template( this.model.toJSON() ) ); this.model.games.each( this.renderGame, this ); return this; }, renderGame: function(game, i){ var gameView = new GameView({ model: game }); gameView.render().$el.appendTo( this.$('.games') ); } }); var GameView = Backbone.View.extend({ tagName: 'li', template: _.template('Game: <%=title%>'), render: function(){ this.$el.html( this.template( this.model.toJSON() )); return this; } }); var dude = new Player(); dude.on('ready', function(player){ var playerView = new PlayerView({ model: player }); playerView.render().$el.appendTo( document.body ); });
        

    No sé si es un error tipográfico o no, pero no está pasando el model a la callback

     instplayer.on('change', function(){ console.log(model); console.log(model.get(games)); }) 

    debería ser

     instplayer.on('change', function(model, options){ console.log(model); console.log(model.get("games")); }) 

    entonces los games deben ser una string no una variable .

    Otra cosa que te sugiero que tengas en cuenta es lo que devuelve el json ; a veces hay que anular la función de parse para obtener los resultados exactos.

    Nuevamente, si está buscando una array y no un solo objeto, tal vez debería usar una collection de players