我正在探索MarionetteJS的BBCloneMail演示应用程序,但我没有看到事件是如何触发渲染操作的。我在这里看到了一些全球性的“节目”事件:
show: function(){
this._showAppSelector("mail");
Marionette.triggerMethod.call(this, "show");
},
但是我没有看到,Marionette.triggerMethod在何处/如何渲染Mail组件。我试图为我的情况调用triggerMethod,但我得到一个'不能调用申请未定义'。为什么上面的调用适用于BBcloneMail应用程序。
我的案例的应用程序控制器:
MA.AppController = Marionette.Controller.extend({ initialize: function(){ _.bindAll(this, "_showGenres"); }, show: function() { if (MA.currentUser) { MA.navbar.show(new MA.Views.Items.LogoutNavbar({model: MA.currentUser})); } else { MA.navbar.show(new MA.Views.Items.LoginNavbar()); } this._showGenres(); }, _showGenres: function() { var categoryNav = new MA.Navigation.Filter({ region: MA.filter }); this.listenTo(categoryNav, "genre:selected", this._categorySelected); categoryNav.show(); MA.main.show(MA.composites.movies); }, showMovieByGenre: function(genre){ var movies = new MA.Controllers.MoviesLib(); that = this; $.when(movies.getByCategory(genre)).then(that._showMovieList); Backbone.history.navigate("#movies/genres/" + genre); }, _showMovieList: function(movieList){ var moviesLib = new MA.Controllers.MoviesLib({ region: MA.main, movies: movieList }); Marionette.triggerMethod.call(this, "show"); } });
我使用以下命令在init.js中初始化应用程序控制器:
app = new MA.AppController();
答案 0 :(得分:3)
查看source for triggerMethod
,这是一种触发事件(传入的字符串)以及另外(如果存在)在具有“on”前缀的对象上运行方法的方法。
在您的情况下,错误与line 560有关,特别是未定义的方法apply
。基于代码(在您的情况下)尝试调用this.trigger('show')
的等值,但AppController
没有名为trigger
的方法。
在这种情况下,我猜测在BBCloneMail示例中this
(基于triggerMethod.call
)实际上并不是控制器,而是要显示的视图。