2012-01-10 12 views
5

मुझे समझ में नहीं आ रहा है कि यह क्यों है। मॉडल को view.intialize() में परिभाषित किया जाएगा जब मैं इसे .model.fetch() चलाता हूं लेकिन देखने में नहीं .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

क्या सफलता प्राप्त होने पर इसे 'संदर्भित किया जा रहा है? शायद आपको इसे बांधना होगा। – JaredMcAteer

उत्तर

8

यह इसलिए क्योंकि this अलग तरह से बाध्य किया जा रहा है क्योंकि प्रस्तुत करना एक कॉलबैक के रूप में इस्तेमाल किया जा रहा है, अपने initialize विधि में पहली पंक्ति के रूप में निम्नलिखित पंक्ति डाल के लिए वर्तमान दृश्य में this बाध्य करने के लिए प्रस्तुत करना विधि:

_.bindAll(this,"render"); 

Underscore.js bindAll function

विधि नामों द्वारा निर्दिष्ट ऑब्जेक्ट पर कई विधियों को बांधता है, जब भी उन्हें बुलाया जाता है उस ऑब्जेक्ट के संदर्भ में चलाया जाता है। बहुत बाध्यकारी कार्यों के लिए आसान है जो ईवेंट हैंडलर के रूप में उपयोग किए जा रहे हैं, जो अन्यथा इसे काफी बेकार के साथ बुलाया जाएगा।

+0

डी ओह, धन्यवाद! – djmccormick

+0

@djmccormick आपका स्वागत है! –

संबंधित मुद्दे