2012-05-14 115 views
0

我試着用backbone.js創建我的第一個javascript應用程序 而且我發現奇怪的行爲,不明白兩塊代碼之間的區別 一個很好,第二個似乎不工作。兩個Backbone.Router定義之間的區別

這顯示在主頁和「#TEST」 URL

var AppRouter = Backbone.Router.extend({ 
    routes:{ 
     "": 'index', 
     "test": 'test' 
    }, 
    index: function(){ 
     alert('index'); 
    }, 
    test: function(){ 
     alert('test'); 
    }  
}); 
var app = new AppRouter(); 
Backbone.history.start(); 

這不行警報,但Backbone.history.hanlers看起來相同

var router = new Backbone.Router({ 
    routes:{ 
     "": 'index', 
     "test": 'test' 
    }, 
    index: function(){ 
     alert('index'); 
    }, 
    test: function(){ 
     alert('test'); 
    }  
}); 
Backbone.history.start(); 

回答

3

代碼的兩個比特之間的區別是,在第一個是創建一個名爲AppRouter的新類,而在第二個類中,您只是創建了一個普通的Backbone.Router類。

我可能會誤解,但看起來你是說第一個例子有效,第二個例子沒有?

第二個例子不起作用的原因是因爲Backbone.Router只接受routes散列作爲它的構造函數的參數。您傳遞的indextest函數不會創建爲對象上的函數。

如果您想要將routes哈希值傳遞給構造函數,您仍然需要使用實際的路由函數來擴展Backbone.Router。例如:

var AppRouter = Backbone.Router.extend({ 
    index: function(){ 
     alert('index'); 
    }, 
    test: function(){ 
     alert('test'); 
    }  
}); 
var app = new AppRouter({ 
    routes:{ 
     "": 'index', 
     "test": 'test' 
    }}); 
Backbone.history.start(); 
+0

我看到了「BackboneJS解剖學」中的第二個例子。你能說一些爲什麼作者使用它?我可以從那裏添加源 – Eugene

+0

@kiwaa我不知道他們爲什麼要使用它,但如果你看Backbone.Router構造函數代碼(http://documentcloud.github.com/backbone/docs/backbone.html #section-109)你可以看到它不會對你傳遞給它的函數做任何事情。也許如果你發佈了源,我可以回答這個問題。 – obmarg

+0

並不重要。感謝幫助 – Eugene