我正在测试crossroads.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显示警告正常。
答案 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
电话收到两个提醒。