我正在尝试在使用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作为模型的唯一标识符也有任何缺点吗?
提前致谢!!!
答案 0 :(得分:22)
cid
输出中默认不包含toJSON
。您需要在模型定义中覆盖toJSON
并添加cid
。
toJSON: function() {
var json = Backbone.Model.prototype.toJSON.apply(this, arguments);
json.cid = this.cid;
return json;
}
答案 1 :(得分:1)
如果您需要临时解决方案,这也可以:
var params = _.extend({}, this.model.toJSON(), {cid: this.model.cid})
答案 2 :(得分:1)
顺便说一下,如果您不需要扩展所有模型的行为,只需使用cid
方法将parse
添加到模型中即可。例如,您有集合&#39; Collection&#39;。您可以为此集合指定模型,并覆盖parse
方法以将模型的cid
附加到响应中。
var Collection = Backbone.Collection.extend({
model: Model
});
var Model = Backbone.Model.extend({
parse: function(response) {
response.cid = this.cid;
return response;
}
});
因此,您可以从模特的属性中获得cid
。