2013-12-09 3 views
5

मॉडल है कि कठपुतली CompositeView को सौंपा गया है के बाद एक Handlebars टेम्पलेट अद्यतन में एक डेटा क्षेत्र के लिए कोशिश कर रहा है प्राप्त किया गया है, लेकिन पृष्ठ में HTML अद्यतन नहीं हो रही है।डेटा कैसे अद्यतन करने के लिए के बाद मॉडल रीढ़ और कठपुतली के साथ Handlebars टेम्पलेट में लाने?

मेरे कोड इस तरह दिखता है:

मॉडल:

B.Page.Model = Backbone.Model.extend({ 
    url: function() { 
     return 'my/resource/'; 
    }, 
}); 


दृश्य:

B.Page.CompositeView = Backbone.Marionette.CompositeView.extend({ 
    template: Handlebars.compile(templates.find('#my-template').html()), 

    initialize: function(options) { 
     _.bindAll(this); 
     this.model.fetch(); 
    }, 
)}; 


टेम्पलेट:

<script id="my-template" type="text/x-handlebars-template"> 
    Date: <span id="my-data-field">{{data}}</span> 
</script> 

मैं संसाधन जाँच की है और यह data क्षेत्र सेट के साथ उचित JSON वापसी करता है। इसके अलावा, मॉडल को देखने के लिए पारित किया जा रहा है।

मुझे लगता है कि इस render समारोह के बाद डेटा प्राप्त हो रहा है कहा जाता हो रही है नहीं करने के लिए कारण होता है; हालांकि, मैं इस बारे में फीडबैक प्राप्त करना चाहता हूं कि इसे कैसे किया जाना चाहिए।

ऐसा करने का एक अच्छा तरीका क्या है?

धन्यवाद!

संपादित करें: इस कंपोजिट व्यू में एक संग्रह है जो इसके साथ जुड़ा हुआ है (जो उचित घटना को ट्रिगर करते समय ठीक है)। मैंने समस्या को हल करने से बचने के लिए कोड के उस हिस्से को उद्देश्य से छोड़ दिया।

+1

आप यकीन है कि यह फिर से प्रतिपादन किया गया था की? आपको अद्यतन ईवेंट को दृश्य की रेंडर विधि में बाध्य करने की आवश्यकता हो सकती है। –

+0

बिल्कुल सही। आपका बहुत बहुत धन्यवाद! –

उत्तर

3

आपका अधिकार सही है, क्योंकि CompositeViewCollectionView से फैला है, यह केवल डिफ़ॉल्ट रूप से संग्रह ईवेंट पर पुनः प्रस्तुत करता है। यह अपने मॉडल पर परिवर्तन पर फिर से प्रस्तुत करना बनाने के लिए, आप अपने CompositeView में कुछ इस तरह कर सकता है:

initialize: function(){ 
    this.listenTo(this.model, "change", this.render); 
} 
+0

धन्यवाद। वास्तविक वाक्य रचना मैं इस्तेमाल किया 'this.model.on ('बदलें', this.render)' है, लेकिन यह स्पष्ट है कि यह एक ही अवधारणा है। –

+0

हाँ, यह इसी अवधारणा है, लेकिन वहाँ मामूली अंतर हैं: [यहां] देखें (http://stackoverflow.com/questions/14041042/backbone-0-9-9-difference-between-listento-and-on) के लिए उदाहरण। –

1

सभी कठपुतली बार देखा गया एक modelEvents उद्देश्य यह है कि मॉडल में पारित करने के लिए बाध्य कर रहा है। बल्कि इनिशियलाइज़ में मैन्युअल रूप से बाध्यकारी से

template: Handlebars.compile(templates.find('#my-template').html()), 

modelEvents: { 
    'change': 'render' 
} 

: तो आप स्वीकार किए जाते हैं जवाब ऊपर से थोड़ा करके साफ कर सकते हैं।

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