Ошибка хеширования с помощью crossroads.js - PullRequest
0 голосов
/ 30 марта 2012

Я тестирую crossroads.js и hasher.js вместе и следующие ошибки кода при втором вызове setHash с параметром "Function.prototype.apply: объект". Это как в 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 Ответ

3 голосов
/ 31 марта 2012

Я понял, в чем проблема.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 и поэтому нет defaultArgsdefaultArgs инициализируется в пустой массив в начале метода parse, если он пуст.

Но это работает слишком хорошо, потому что теперь я получаю два предупреждения для каждого setHashзвоните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...