0

我正在探索 MarionetteJS 的 BBCloneMail 演示应用程序,但我没有看到事件如何触发呈现操作。我在这里看到了一些全球性的“表演”活动:

https://github.com/marionettejs/bbclonemail/blob/master/public/javascripts/bbclonemail/components/appController.js#L25

show: function(){
  this._showAppSelector("mail");
  Marionette.triggerMethod.call(this, "show");
},

但我没有看到 Marionette.triggerMethod 在哪里/如何导致呈现 Mail 组件。我试图为我的案例调用 triggerMethod,但我得到一个“无法调用未定义的应用程序”。为什么上面的调用适用于 BBcloneMail 应用程序。

触发方法

我的案例的应用程序控制器:

MA.AppController = Marionette.Controller.extend({

  初始化:函数(){
    _.bindAll(this, "_showGenres");
  },


  显示:函数(){
    如果(MA.currentUser){
      MA.navbar.show(new MA.Views.Items.LogoutNavbar({model: MA.currentUser}));
    }
    别的
    {
      MA.navbar.show(新 MA.Views.Items.LoginNavbar());
    }
    this._showGenres();
  },

  _showGenres:函数(){
    var categoryNav = new MA.Navigation.Filter({
      地区:MA.filter
    });
    this.listenTo(categoryNav, "genre:selected", this._categorySelected);
    类别导航.show();
    MA.main.show(MA.composites.movi​​es);
  },

  showMovieByGenre:功能(流派){
    var movies = new MA.Controllers.MoviesLib();
    那=这;
    $.when(movies.getByCategory(genre)).then(that._showMovieList);

    Backbone.history.navigate("#movies/genres/" + 流派);
  },

  _showMovieList:函数(电影列表){
    var moviesLib = new MA.Controllers.MoviesLib({
      地区:MA.main,
      电影:电影列表
    });
    Marionette.triggerMethod.call(this, "show");

  }
});

我在 init.js 中初始化应用程序控制器:

app = new MA.AppController();
4

1 回答 1

3

查看 的来源triggerMethod,这是一种触发事件(传入的字符串)和另外(如果存在)在具有“on”前缀的对象上运行方法的方法。

在您的情况下,错误与第 560 行有关,特别是未定义没有方法apply。根据代码,它(在你的情况下)试图调用this.trigger('show')- 但AppController没有调用的方法trigger

在这种情况下,我猜测在 BBCloneMail 示例中this(基于triggerMethod.call)实际上不是控制器,而是要显示的视图。

于 2013-04-30T14:15:12.310 回答