2013-03-08 12 views
11

Próbuję renderować kolekcję szkieletu na szablonie, który jest zbudowany z pliku mustache.js. Problem polega na tym, że nie udało mi się zdobyć cid modelu w szablonie. Mój kod to:nie można pobrać identyfikatora modelu podczas renderowania kolekcji szkieletu przez szablon

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

z powyższego kodu. Mogę pobrać aptId, beginTime i czas zakończenia, ale nie CID. Jak zdobyć Cid modelu z kolekcji podczas renderowania go na szablonie?

i moja metoda renderowania z punktu widzenia wygląda to

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

też jest jakaś wada wykorzystania CID jako unikatowy identyfikator modelu?

Z góry dziękuję !!!

+0

Dlaczego cid musi znajdować się w html? Jeśli masz identyfikator modelu (wygląda na to, że aptId to idAttribute?), Możesz go znaleźć w kolekcji, 'collection.get (modelId)'. –

Odpowiedz

22

Domyślnie cid na wyjściu toJSON. Będziesz musiał zastąpić toJSON w definicji modelu i dołączyć cid.

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

W każdym razie jest dość dziwne, że nie ma natywnego sposobu (flaga?), Aby pokazać "cid" wewnątrz modelu. – xdemocle

+0

to jest niedorzeczne, przegłosowane –

1

Jeśli potrzebujesz rozwiązania skokowego ogłoszenie, to będzie działać również:

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

Nawiasem mówiąc, jeśli nie trzeba rozszerzyć zachowanie wszystkich modelach można po prostu dodać cid do modelu przy użyciu metody parse. Na przykład masz kolekcję "Kolekcja". Można określić model dla tej kolekcji i zastąpić metodę parse, aby dołączyć do odpowiedzi model cid modelu.

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

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

Dzięki temu można uzyskać cid z atrybutów modelu.

Powiązane problemy