crossroads.js哈希错误

Hashing error with crossroads.js

本文关键字:错误 哈希 js crossroads      更新时间:2023-09-26

我正在测试crossroad.js和hasher.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显示警报罚款。

我发现了问题所在。crossroads.parsehasher.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呼叫都会收到两个警报。