2012-03-30 64 views
0

我測試了crossroads.jshasher.js在一起,並在第二次setHash調用,「Function.prototype.apply:參數不是一個對象」以下代碼錯誤。這是在IE和Chrome中。散列錯誤與crossroads.js

crossroads.addRoute('lorem/{id}', function(id) { alert(id); }); 

hasher.changed.add(crossroads.parse, crossroads); 
hasher.init(); 

hasher.setHash('lorem/123'); // works with alert(123) 
hasher.setHash('lorem/456'); // javascript error 

我在這裏做錯了什麼?第一個setHash顯示警報正常。

+0

瀏覽器與它有什麼關係,這不是一個Node.js的東西嗎?或者我不知何故錯過了這個問題? – tobyodavies 2012-03-30 04:57:02

+0

我沒有使用Node.js,它只是在瀏覽器中運行一些測試代碼。包含的唯一JavaScript庫是signals.min.js,crossroads.min.js和hasher.min.js。所以據我瞭解,除了更改URL的哈希兩次,它不應該做任何事情,顯示一些警報。 – Jason 2012-03-30 05:35:04

回答

2

我找出了問題所在。 crossroads.parse對於hasher.changed信號的簽名(request,defaultArgs)有錯誤,不應直接用此代碼添加:hasher.changed.add(crossroads.parse, crossroads)。如果我在代理方法通過與簽名(newHash,oldHash)工作原理:

crossroads.addRoute('lorem/{id}', function(id) { alert(id); }); 
var proxy = function(newHash, oldHash) { crossroads.parse(newHash); }; 

hasher.changed.add(proxy); // Use to be hasher.changed.add(crossroads.parse, crossroads); 
hasher.init(); 

hasher.setHash('lorem/123'); 
hasher.setHash('lorem/456'); 

它的作品第一次的原因是因爲沒有oldHash等沒有defaultArgs。如果parse方法爲空,defaultArgs會被初始化爲一個空數組。

但這個工作有點太好了,因爲現在我現在每個setHash調用都會​​收到兩個警報。

+0

完美的解決了crossroads.routed.add的回調被傳遞(oldroute,newroute)而不是(route,data)的問題, – 2012-04-25 17:19:13