Backbone Marionette:我可以为collectionView的emptyView提供选项吗?

时间:2013-06-21 15:05:52

标签: javascript backbone.js marionette

场景是这样的:我有一个collectionView可以在几个地方使用。我将一些选项传递到视图中以更改某些显示方面(主要是措辞),因为到处都是完全相同的行为。

我真的想将此自定义扩展到emptyView,但我找不到这样做的方法。似乎没有提及collectionView上的emptyView,除了定义它之外,我似乎也无法从emptyView访问collectionView

基本上,我希望能够做到这样的事情:

var noItemsView = Backbone.Marionette.ItemView.extend({
    tagName: "li",
    className: "no-results",
    template: Handlebars.compile(noResultsTemplate),
}),

leftToggleListView = Backbone.Marionette.CollectionView.extend({
    tagName: "ul",
    className: "left-toggle-view-list",
    emptyView: noItemsView,

    initialize: function() {
        this.emptyView.model.set("name": "some custom name");
    }
});

然后让noItemsView能够在其模板中呈现{{ name }}

有没有办法实现这一点,没有修改Marionette?

3 个答案:

答案 0 :(得分:3)

在collectionView中你可以使用buildItemView,这个函数也会在构建emptyView时被调用

我在jsFiddle http://jsfiddle.net/rayweb_on/TN34P/

中做了一个小小的演示
var leftToggleListView = Backbone.Marionette.CollectionView.extend({
tagName: "ul",
className: "left-toggle-view-list",
emptyView: noItemsView,
ValuethatMakesSense : "I do!",
buildItemView: function(item, ItemViewType, itemViewOptions){
   var options = _.extend({model: item}, itemViewOptions);
   var name = this.ValuethatMakesSense;
   var view = new ItemViewType({name : name});
   return view;
}
});

在项目视图的初始化功能中,您可以阅读传递的选项。

var noItemsView = Backbone.Marionette.ItemView.extend({
initialize : function (options) {
  var name = this.options.name;
  console.log(name);
},

tagName: "li",
className: "no-results",
template: "#noresults"
});

我在collectionView中使用了一个属性,然后将其读取/传递给buildItemView中的空视图,只是为了测试buildItemView函数的功能,你可以在那里进行正确的逻辑检查和验证。

答案 1 :(得分:1)

自问这个问题以来已经有一段时间了,但对任何人来说都可能有所帮助:

Marionette CollectionView现在有一个emptyViewOptions属性,其工作方式与itemViewOptions类似,但对于emptyView:

http://marionettejs.com/docs/v2.4.2/marionette.collectionview.html#collectionviews-emptyviewoptions

答案 2 :(得分:-3)

实际上你可以用这种方式访问​​emptyView:

this.children._views[_.keys(this.children._views)[0]];

似乎在新版本中我们将有一个允许获得emptyView的方法。 https://github.com/marionettejs/backbone.marionette/pull/727