无法在Marionette ItemView中渲染集合

时间:2013-09-30 13:58:06

标签: javascript html backbone.js handlebars.js marionette

我在使用ItemView呈现集合时遇到了一些问题。 Form Marionette doc(Rendering A Collection In An ItemView)写道,我可以将一个集合传递给ItemView,在我的模板中,我可以像items一样迭代。

<script id="some-template" type="text/html">
  <ul>
    <% _.each(items, function(item){ %>
    <li> <%= item.someAttribute %> </li>
    <% }); %>
  </ul>
</script>

但在我的情况下似乎没有用。

这是我正在使用的代码。

var report1 = new ReportModel({ name: "David", report:"1" });
var report2 = new ReportModel({ name: "Mark", report:"2" });
var report3 = new ReportModel({ name: "Jack",  report:"3" });

var reportCollection = new ReportCollection( [report1, report2, report3] );

// create the view and inject somewhere, code skipped for brevity here
new CollectView( { model: reportModel, collection: reportCollection } );

通过像这样的把手来丰富模板。

{{log items}}

{{#each items}}
<div data-role="drop-class"><span>{{this.name}}</span></div>
{{/each}}

如果我记录items,则会显示undefined

视图模型用于显示其他数据。我的要求:我需要ItemView。没有CollectionCompositeView

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果将模型和集合的 传递给ItemView,则在呈现视图之前,items数组未在调用的serializeData method中设置。这就是为什么itemsundefined

要在这种情况下使items可用,必须适当地覆盖serializeData方法。

(另见answer for this same issue in Marionette's GitHub。)

答案 1 :(得分:0)

View不需要知道模型和集合。

尝试:

// create the view and inject somewhere, code skipped for brevity here
new CollectView( { collection: reportCollection } );