使用crossroads.js散列错误

时间:2012-03-30 04:34:32

标签: javascript url-routing

我正在测试crossroads.jshasher.js以及第二个setHash调用中的以下代码错误,其中“Function.prototype.apply:argument不是Object”。这是在IE和Chrome中。

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显示警告正常。

1 个答案:

答案 0 :(得分:3)

我找出了问题所在。 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。如果defaultArgs方法为空,则parse初始化为空数组。

但这样做有点太好了,因为现在我正在为每个setHash电话收到两个提醒。