11

我正在尝试在使用 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 作为模型的唯一标识符还有什么缺点吗?

提前致谢 !!!

4

3 回答 3

23

默认情况下cid不包含在toJSON输出中。您将需要toJSON在模型定义中覆盖并包含cid.

toJSON: function() {
  var json = Backbone.Model.prototype.toJSON.apply(this, arguments);
  json.cid = this.cid;
  return json;
}
于 2013-03-08T16:36:42.840 回答
1

如果您需要临时解决方案,这也可以:

var params = _.extend({}, this.model.toJSON(), {cid: this.model.cid})
于 2014-07-29T22:04:10.300 回答
1

顺便说一句,如果您不需要扩展所有模型的行为,您可以cid使用方法添加到您的模型中parse。例如,您有收藏“收藏”。您可以为此集合指定模型并覆盖parse方法以将模型附加cid到响应。

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

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

因此,您将能够cid从模型的属性中获取。

于 2016-01-17T08:38:55.187 回答