2012-10-23 17 views
0

我有一個非常基本的Backbone應用程序,它使用路由器實例化視圖和集合。在與應用程序打的時候,我注意到,如果我把代碼行的的application.js文件的頂部實例路由器骨幹:構造函數在文件中的位置

router = new DocsRouter(); 

,然後應用程序沒有工作;它必須位於文件的底部。然而,這對我沒有意義。爲什麼這行代碼的位置很重要,因爲啓動應用程序的所有重要事件都發生在路由器內部?我不應該能夠從任何地方觸發路由器嗎?

window.DocsRouter = Backbone.Router.extend({ 

     initialize : function() { 

      this.docs = new Docs(); 

      this.docs.fetch(); 


      this.docFormView = new DocFormView({ collection : this.docs }); 
      this.docsView = new DocsCollectionViewTempo({ collection : this.docs }); 
      this.docsView.render(); 

      this.route("doc/:id", "doc", function(id){ 
       console.log(id, this.docs.get(id).toJSON()); 
      }); 
     }, 

     routes : { 
      "" : "root", 
      "about" : "about", 
      "doc/:id" : "doc" 
     }, 

     root : function() { console.log('Vous êtes à la racine');}, 
     about : function() { console.log('A propos : ceci est un tutorial BackBone');}, 
     doc : function(id) { console.log(id, this.docs.get(id).toJSON()); } 
    }); 

router = new DocsRouter(); 
Backbone.history.start(); 
+0

如果您在嘗試實例化DocsRouter對象後將構造函數賦值給'window.DocsRouter' *,那該如何工作? – Bergi

+0

@Bergi爲什麼不呢?我是一個小菜鳥,所以如果你可以解釋 – BrainLikeADullPencil

+0

你嘗試在創建它之前使用一些東西? – Bergi

回答

1

不可以。在聲明DocRouter之前,您不能創建DocRouter的實例。

window.DocsRouter = Backbone.Router.extend({..}); 
router = new DocsRouter(); 

這兩條線的順序必須是這樣的。在第一行DocRouter不存在之前,您不能實例化它。

相關問題