Я понял, в чем проблема.crossroads.parse
имеет неправильную подпись (request, defaultArgs) для сигнала hasher.changed
и не должен добавляться непосредственно с этим кодом: 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
звоните.