2013-03-08 28 views
11

üzerinde bir omurga koleksiyonu işlerken modelin cidini alamıyor Mustache.js ile oluşturulan bir şablonda bir omurga koleksiyonu oluşturmaya çalışıyorum. Sorun şu ki şablondaki modelin cidini alamadım. Kodum ben Cid aptId, BeginTime almak ve Saat sona ama olamaz, yukarıdaki koddan, şablon

 <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> 

olduğunu. Bir şablondaki bir koleksiyondan modelin Cid'i nasıl alınır? görünümden

ve benim işlemek yöntem ayrıca bir modelin benzersiz tanımlayıcı olarak cid kullanarak herhangi bir dezavantajı var bu

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

benziyor?

Şimdiden teşekkürler!

+0

Neden html'de olmak için cid'e ihtiyacınız var? Modelin kimliğine sahipseniz (aptId idAttribute ismidir?), Koleksiyonda bulabilirsiniz: collection.get (modelId) '. –

cevap

22

cidtoJSON çıkışında varsayılan olarak dahil değildir. Model tanımınızda toJSON'u geçersiz kılmanız ve cid'u içermeniz gerekir. Bir reklam hock çözüm gerekiyorsa

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

Her durumda, modelin içinde "cid" i göstermek için yerel bir yolun (bir bayrak?) Olmaması oldukça garip. – xdemocle

+0

Bu çok saçma, aşağılık –

1

Bu da çalışmaya devam eder:

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

arada sadece kendi modeline cid ekleyebilir tüm modellerin davranışlarını uzatmak gerekmiyorsa parse yöntemini kullanarak. Örneğin 'Koleksiyon' koleksiyonunuz var. Bu koleksiyon için model belirtebilir ve yanıtın modeline cid numaralı bağlantıyı eklemek için parse yöntemini geçersiz kılabilirsiniz.

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

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

Yani modelin özelliklerine herhangi bir cid almak mümkün olacak.

İlgili konular