Backbone.js 此事件在木偶中调用到哪里
我正在探索用于木偶技术的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”前缀的对象上运行方法的方法 在您的案例中,错误与以下因素有关:未定义上没有方法Backbone.js 此事件在木偶中调用到哪里,backbone.js,marionette,Backbone.js,Marionette,我正在探索用于木偶技术的BBCloneMail演示应用程序,但我没有看到事件是如何触发渲染操作的。我在这里看到了一些全球“展示”活动: 但是我看不出,marionete.triggerMethod在何处/如何呈现邮件组件。我试图为我的案例调用triggerMethod,但我收到一个“无法调用apply for undefined”。为什么上面的调用对BBcloneMail应用程序有效 我的案例的应用程序控制器: MA.AppController = Marionette.Controller
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();