Backbone.js 此事件在木偶中调用到哪里

Backbone.js 此事件在木偶中调用到哪里,backbone.js,marionette,Backbone.js,Marionette,我正在探索用于木偶技术的BBCloneMail演示应用程序,但我没有看到事件是如何触发渲染操作的。我在这里看到了一些全球“展示”活动: 但是我看不出,marionete.triggerMethod在何处/如何呈现邮件组件。我试图为我的案例调用triggerMethod,但我收到一个“无法调用apply for undefined”。为什么上面的调用对BBcloneMail应用程序有效 我的案例的应用程序控制器: MA.AppController = Marionette.Controller

我正在探索用于木偶技术的BBCloneMail演示应用程序,但我没有看到事件是如何触发渲染操作的。我在这里看到了一些全球“展示”活动:

但是我看不出,marionete.triggerMethod在何处/如何呈现邮件组件。我试图为我的案例调用triggerMethod,但我收到一个“无法调用apply for undefined”。为什么上面的调用对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"); } }); 查看,这是一种触发事件(传入的字符串)和另外(如果存在)在具有“on”前缀的对象上运行方法的方法

在您的案例中,错误与以下因素有关:未定义上没有方法
apply
。基于代码,its(在您的情况下)尝试调用与此.trigger('show')等效的
AppController
没有名为
trigger
的方法

在这种情况下,我猜在BBCloneMail示例中,这个(被嵌入到
triggerMethod.call中)实际上不是控制器,而是要显示的视图。

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

在您的案例中,错误与以下因素有关:未定义上没有方法
apply
。基于代码,its(在您的情况下)尝试调用与此.trigger('show')
等效的
AppController
没有名为
trigger
的方法


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

你能发布你的控制器代码吗?你能发布你的控制器代码吗?这是一个非常有用的答案,所以我接受它。虽然我现在需要做一些重构来让应用程序工作:-)这是一个非常有用的答案,所以我接受它。虽然我现在需要进行一些重构才能让应用程序正常工作:-) 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"); } });
app = new MA.AppController();