2014-01-08 68 views
5

我真的不明白他們是如何有用的。在介紹了初始化原article這是代碼示例:木偶應用程序初始化程序的要點是什麼?

App = new Backbone.Marionette.Application(); 

App.addInitializer(function(){ 
    // add some app initialization code, here 
}); 

App.addInitializer(function(){ 
    // more initialization stuff 
    // for a different part of the app 
}); 

// run all the initializers and start the app 
App.start(); 

但是,據我瞭解,有一個^之間沒有區別,這一點:

App = new Backbone.Marionette.Application(); 

// add some app initialization code, here 

// more initialization stuff 
// for a different part of the app 

的好處後面的代碼是你可以實際控制初始化代碼的順序,而初始化器是以隨機順序運行的。那麼,addInitializer的優勢是什麼?

回答

2

我認爲主要的勝利是語義 - 它是一個非常具有描述性的方法名稱 - 以及相關功能的分組。我寫我的初始化與命名功能,調試和描述性幫助:

App.addInitializer(function startSomePartOfTheApp() { 

}); 

另一個有用的功能是函數綁定到應用實例。這使您可以在初始化程序中混合使用,這在較大的應用程序中很有用。

但最終,您可以按照您的建議實現相同的功能。

1

木偶的應用程序都將初始化,這樣就可以寫App.start()

的這幾款採用後運行代碼:

  • 在會後執行js文件放置代碼內嵌腳本添加

    <script type='text/javascript'> 
    $(document).ready(function() { 
         App.start(); 
    }); 
    </script> 
    
  • 執行收集的初始獲取,一旦你知道的定義集合

  • 設置菜單代碼

樂趣注:

  1. 如果應用程序已經啓動,他們立即運行
  2. 保持你清楚了JavaScript功能的可用性驚喜。
+0

您的第一個示例是,我確實瞭解如何將start()附加到您不知道何時會觸發的回調中。其他兩個例子並不多。 –

+0

例如「一旦知道集合被定義就執行集合的初始獲取」 - 假設你的意思是你將在初始化器中獲取集合 - 你仍然必須知道集合是在初始化器運行之前定義的,所以你會仍然必須在運行'start()'之前或在'before:start'回調之前定義集合。那麼爲什麼在你沒有完成所有這些額外的回調之前,你不確定你是否定義了你的集合呢?無論哪種方式,你必須跟蹤事物的順序。 –