在模板上呈现主干集合时,无法获取模型的cid

cannot get the cid of the model while rendering a backbone collection over a template

本文关键字:获取 模型 cid 集合      更新时间:2023-09-26

我正试图在一个模板上渲染一个骨干集合,该模板是用mustache.js构建的。问题是我无法在模板中获得模型的cid。我的代码是

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

从上面的代码,我可以得到aptId, beginTime和end Time,但不是Cid。如何从一个集合中获得模型的Cid,同时在模板上渲染它?

和我的渲染方法从视图看起来像这样

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

使用cid作为一个型号的唯一标识符有什么缺点吗?

提前感谢!!

默认cid不包含在toJSON输出中。您需要在模型定义中覆盖toJSON,并包含cid

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

如果你需要一个广告的解决方案,这也可以工作:

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

顺便说一下,如果您不需要扩展所有模型的行为,您可以使用parse方法将cid添加到您的模型中。例如,你有一个collection ' collection '。您可以为这个集合指定模型,并覆盖parse方法,将模型的cid附加到响应。

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

因此您将能够从模型的属性中获得cid