MarionetteJS& CompositeView - 如何呈现自定义表头

时间:2014-03-04 20:02:58

标签: backbone.js marionette

我是MarionetteJS的新手而且喜欢它。我创建了一个ItemView和CompositeView来显示集合中的值。这很棒,但我想渲染自定义字段/列标题。我使用Backbone.Collection并使用_.each(item.keys(),function(key){...我不能用MarionetteJS做这个,因为我每行使用一个ItemView。

我尝试过使用appendHTML,但是访问该集合时遇到了困难。这是我到目前为止所得到的:

...
render: function () {
    var template = "<% _.each(item.keys(), function(key){%><th><%= key %></th><%})%>";
    this.$("thead").html(_.template(template, {
        item: this.collection.models[0]
    }));
},
appendHtml: function (collectionView, itemView) {
    collectionView.$("tbody").append(itemView.el);
},
...

这不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以在此compositeView中存储额外数据,然后在模板中使用它。请允许我使用下面的CoffeeScript。

第1步:获取数据并将其存储在上下文变量中,如this.headers

initialize: ->
  @headers = @collection.last().attributes.keys

第2步:使用内置templateHelpers

在模板中提供数据
templateHelpers ->
  view = @ # Use this line because context will change below
  headers: ->
    view.headers

第3步:使用简单的迭代在模板中显示它。我将使用Handlerbars例如

<table>
  <thead>
    <tr>
      <th>Records</th>
      {{#each headers}}
        <th>{{this}}</th>
      {{/each}}
    </tr>
  </thead> 
  <tbody>
    <!-- Display itemViews here-->
  </tbody>
</table>