2012-01-10 16 views
5

Nie mogę zrozumieć, dlaczego this.model byłby zdefiniowany w view.intialize(), gdy uruchomię this.model.fetch() na nim, ale nie w view.render().Model szkieletu jest niezdefiniowany?

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

Czy 'ten' otrzymuje odwołanie, gdy sukces jest wywoływany? Może musisz to powiązać. – JaredMcAteer

Odpowiedz

8

To dlatego, że this jest związany w inny sposób, ponieważ czyni jest używany jako zwrotnego umieścić następujące jako pierwszej linii w sposób initialize wiążą this do bieżącego widoku na Sposób render:

_.bindAll(this,"render"); 

Underscore.js bindAll function

Powoduje powiązanie wielu metod obiektu, określonych przez metody name, z , które będą uruchamiane w kontekście tego obiektu, gdy zostaną wywołane. Very poręczny dla funkcji wiążących, które będą używane jako eventy , które w innym wypadku byłyby wywoływane z dość bezużytecznym.

+0

D'oh, dziękuję! – djmccormick

+0

@djmccormick nie ma za co! –

Powiązane problemy