2012-01-10 6 views
5

this.modelをview.int()で実行すると、this.modelがなぜview.intialize()で定義されるのか理解できません。バックボーンモデルは未定義ですか?

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が異なっバインドされているので、それはのために、現在のビューにthisをバインドするために、あなたのinitialize方法で最初の行として次の行を入れて、ありますrenderメソッド:

_.bindAll(this,"render"); 

Underscore.js bindAll function

methodNamesで指定されたオブジェクトのメソッドのうち、呼び出されたときにそのオブジェクトのコンテキスト内で実行されるものを にバインドします。非常に イベントとして使用される関数をバインドするのに便利です。それ以外の場合はかなり役に立たないものが呼び出されます。

+0

D'oh、ありがとう! – djmccormick

+0

@djmccormickよろしくお願いします! –