2013-03-08 5 views
11

पर रीढ़ की हड्डी संग्रह को प्रस्तुत करते समय मॉडल के सिड को नहीं प्राप्त कर सकता है। मैं mustache.js के साथ बनाए गए टेम्पलेट पर रीढ़ की हड्डी संग्रह प्रस्तुत करने का प्रयास कर रहा हूं। समस्या यह है कि मैं टेम्पलेट में मॉडल के सिड नहीं प्राप्त कर सका। मेरा कोडटेम्पलेट

 <div class="phone span4"> 
      <h5> Phone Appointments</h5> 
      {{ _.each(slots, function(slot) { }} 
       {{ if(slot.aptType == "P"){ }} 
        <h6 cid="{{=slot.cid}}" aptId="{{=slot.aptId}}"> {{=slot.beginTime}} - {{=slot.endTime}} </h6> 
       {{ } }} 
      {{ }); }} 
     </div> 

उपरोक्त कोड से, मैं एपीटीआईडी, स्टार्टटाइम और एंड टाइम प्राप्त कर सकता हूं, लेकिन सीड नहीं। किसी टेम्पलेट पर इसे प्रस्तुत करते समय संग्रह से मॉडल की सीड कैसे प्राप्त करें? देखने से

और मेरे प्रस्तुत करना विधि इस

render:function(){ 
    var template = _.template($("#slot-display-template").html()); 
    compiledTmp = template({slots: this.collection.toJSON()}) 
    this.$el.append(compiledTmp); 
    } 

तरह लग रहा है इसके अलावा वहाँ एक मॉडल के अद्वितीय पहचानकर्ता के रूप सीआईडी ​​का उपयोग कर के किसी भी नुकसान है?

अग्रिम धन्यवाद !!!

+0

आपको एचटीएमएल में होने के लिए सीड की आवश्यकता क्यों है? यदि आपके पास मॉडल की आईडी है (जैसे aptId idAttribute है?), तो आप इसे संग्रह में प्राप्त कर सकते हैं, 'collection.get (modelId) '। –

उत्तर

22

cidtoJSON आउटपुट में डिफ़ॉल्ट रूप से शामिल नहीं है। आपको अपनी मॉडल परिभाषा में toJSON ओवरराइड करने की आवश्यकता होगी और cid शामिल करें।

toJSON: function() { 
    var json = Backbone.Model.prototype.toJSON.apply(this, arguments); 
    json.cid = this.cid; 
    return json; 
} 
+0

किसी भी मामले में काफी अजीब बात है कि मॉडल के अंदर "सीड" दिखाने के लिए मूल तरीका नहीं है (ध्वज?)। – xdemocle

+0

यह हास्यास्पद, अपवित्र है –

1

आप एक विज्ञापन ओल समाधान की जरूरत है, यह भी काम करेगा:

var params = _.extend({}, this.model.toJSON(), {cid: this.model.cid}) 
1

वैसे अगर आप सभी मॉडलों के व्यवहार का विस्तार करने के तुम सिर्फ अपने मॉडल में cid जोड़ सकते हैं की जरूरत नहीं है parse विधि का उपयोग कर। उदाहरण के लिए आपके पास संग्रह 'संग्रह' है। आप इस संग्रह के लिए मॉडल निर्दिष्ट कर सकते हैं और प्रतिक्रिया के लिए मॉडल के cid संलग्न करने के लिए parse विधि ओवरराइड कर सकते हैं।

var Collection = Backbone.Collection.extend({ 
    model: Model 
}); 

var Model = Backbone.Model.extend({ 
    parse: function(response) { 
     response.cid = this.cid; 
     return response; 
    } 
}); 

तो तुम मॉडल की विशेषताओं से cid प्राप्त करने में सक्षम हो जाएगा।