2012-01-10 10 views
5

Non riesco a capire perché this.model venga definito in view.intialize() quando eseguo this.model.fetch() su di esso ma non in view.render().Il modello backbone non è definito?

Chrome Developer Tools Screenshot

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/example.html' 
], function($, _, Backbone, exampleTemplate){ 

    var exampleView = Backbone.View.extend({ 
    el: $('body'), 
    initialize: function() { 
     this.model.set({ _id: this.options.user_id }); 
     this.model.fetch({ 
     success: this.render, 
     error: function(model, response) { 
      console.log('ERROR FETCHING MODEL'); 
      console.log(model); 
      console.log(response); 
     } 
     }); 
    }, 
    render: function() { 
     console.log('HELLO FROM RENDER'); 
     console.log(this.model); 
     console.log('GOODBYE FROM RENDER'); 
    } 
    }); 

    return exampleView; 

}); 
+1

E 'questo che viene de-referenziato quando viene chiamato il successo? Forse hai bisogno di legarlo. – JaredMcAteer

risposta

8

È perché il this è vincolati diverso perché rendering viene utilizzato come un callback, inserire la riga seguente come prima riga nel metodo initialize di impegnare this alla visualizzazione corrente il metodo render:

_.bindAll(this,"render"); 

Underscore.js bindAll function

Associa un numero di metodi sull'oggetto, specificato da methodNames, a da eseguire nel contesto di tale oggetto ogni volta che vengono richiamati. Molto a portata di mano per le funzioni di associazione che verranno utilizzate come gestori di eventi , che altrimenti verrebbero invocati con un valore abbastanza inutile.

+0

D'oh, grazie! – djmccormick

+0

@djmccormick sei il benvenuto! –