【问题标题】:cannot get the cid of the model while rendering a backbone collection over a template在模板上渲染主干集合时无法获取模型的 cid
【发布时间】:2013-03-08 16:16:42
【问题描述】:

我正在尝试在使用 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 在 html 中?如果您有模型的 id(看起来 aptId 是 idAttribute?),您可以在集合中找到它,collection.get(modelId)

标签: javascript templates backbone.js mustache


【解决方案1】:

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

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

【讨论】:

  • 在任何情况下都非常奇怪,没有本地方式(标志?)在模型中显示“cid”。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    这样您就可以从模型的属性中获取cid

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多