2013-04-30 26 views
0

中調用我正在探索MarionetteJS的BBCloneMail演示應用程序,但我沒有看到事件如何觸發渲染操作。我看到一些全球「秀」活動在這裏:這個事件在MarionetteJS

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結果如何進入渲染郵件組件。我試圖爲我的情況調用triggerMethod,但我得到'無法調用申請undefined'。爲什麼上面的調用適用於BBcloneMail應用程序。

trigger Method

我的情況下,應用控制器:

 
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

你可以發佈你的控制器代碼嗎? – nemesv 2013-04-30 06:50:30

回答

3

望着source for triggerMethod,這是一個觸發一個事件(字符串被傳入)的方式,另外(如果存在的話)在對象上運行一個具有'on'前置固定。

在你的情況下,錯誤與line 560有關,具體來說,沒有方法apply未定義。基於它的代碼(在你的情況下)試圖調用this.trigger('show')的equivilent - 但AppController沒有一種方法稱爲trigger

在這種情況下,我猜測在BBCloneMail示例this(基於triggerMethod.call)實際上並不是控制器,而是要顯示的視圖。

+0

這是一個非常有用的答案,所以我接受它。雖然我需要做一些重構來讓應用程序正常工作:-) – poseid 2013-04-30 20:55:25