2012-01-10 3 views
5

Я не могу понять, почему this.model будет определен в view.intialize(), когда я запустил this.model.fetch(), но не в view.render().Магистральная модель не определена?

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

Неужели 'this' получает отказ от ссылки при успешном вызове? Возможно, вам нужно связать его. – JaredMcAteer

ответ

8

Это происходит потому, что this является связываясь по-разному, потому что делают в настоящее время используются в качестве обратного вызова, поместите следующую строку в качестве первой строки в методе initialize связать this текущий вид для метод визуализации:

_.bindAll(this,"render"); 

Underscore.js bindAll function

Привязывается ряд методов к объекту, указанному именами методов, до , которые выполняются в контексте этого объекта при каждом вызове. Очень удобен для функций привязки, которые будут использоваться как обработчики событий , которые в противном случае вызывались бы с этим бесполезным.

+0

D'oh, спасибо! – djmccormick

+0

@djmccormick добро пожаловать! –

Смежные вопросы