2013-03-08 6 views
11

Ich versuche, eine Backbone-Sammlung auf einer Vorlage zu rendern, die mit mustache.js erstellt wird. Das Problem ist, dass ich die CID des Modells in der Vorlage nicht finden konnte. Mein Code istkann die CID des Modells beim Rendern einer Backbone-Sammlung über eine Vorlage nicht erhalten

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

aus dem obigen Code kann ich die aptId, beginTime und Endzeit, aber nicht die CID. Wie erhalte ich die CID des Modells aus einer Sammlung, während ich es auf einer Vorlage rendere?

und meine Render-Methode aus der Sicht sieht wie folgt aus

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

gibt es auch jede Nachteil cid als eindeutige Kennung eines Modells?

Vielen Dank im Voraus !!!

+0

Warum brauchen Sie die CID in der HTML? Wenn Sie die ID des Modells haben (sieht so aus, als wäre aptId das idAttribute?), Können Sie es in der Sammlung 'collection.get (modelId)' finden. –

Antwort

22

Der cid ist standardmäßig nicht im toJSON-Ausgang enthalten. Sie müssen toJSON in Ihrer Modelldefinition überschreiben und cid einschließen.

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

In jedem Fall ist es ziemlich komisch, dass es keine native Möglichkeit (eine Flagge?) Gibt, um "cid" innerhalb des Modells zu zeigen. – xdemocle

+0

das ist lächerlich, upvoted –

1

Wenn Sie eine Anzeige hock Lösung benötigen, auch wäre dies:

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

Durch die Art und Weise, wenn Sie Sie nicht nur das Verhalten aller Modelle erweitern müssen cid zu Ihrem Modell hinzufügen mit parse Methode. Zum Beispiel haben Sie Sammlung "Sammlung". Sie können das Modell für diese Sammlung angeben und die Methode parse überschreiben, um die cid des Modells an die Antwort anzuhängen.

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

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

So können Sie cid von Modell Attribute erhalten.

Verwandte Themen