任意の数のパラメーターを認識する単一の Sammy ルートがあります。ルートは次のようになります。
get(/^\/(?:\?[^#]*)?#page\/?((?:[^\:\/]+\:[^\:\/]+\/?)*)$/g, function() {
var params = {};
var splat = this.params.splat[0];
var re = /([^\:\/]+)\:([^\:\/]+)/g;
match = true
while(match = re.exec(splat)) {
params[match[1]] = match[2];
}
self.loadData(params);
});
このコードは機能します。それが行うことは#page/param1:value1/param2:value2/
、任意の数のパラメーターのパターンのルートを認識することです。私のloadData
関数には、これらのパラメーターの多くにデフォルト値があります。多くのブラウザーの多くのコンピューターで 100% 動作するため、ページの実際の読み込みに問題はないと確信しています。しかし、私の Android のブラウザと、友人の Mac の Safari と Chrome (私の PC の Chrome では動作します) では奇妙な動作をします。これらは Webkit ブラウザーであることに気付きました。
動作は、ルートが最初の URL 変更で正しく実行され、次の URL 変更では実行されず (ブラウザ バーの URL は実際には常に変更されますが)、3 回目の URL 変更で再び機能し、勝利するというものです。 4番目のことではありません。つまり、1 回おきに動作します。これは私には非常に奇妙な動作のように思えます。これをデバッグする方法がわかりません。特定のリンクについては、クリック時にウィンドウの場所を URL に設定し、runRoute('get', url);
. ページ上のすべてのクリック イベントに対してこれを追加する必要があるのは現実的ではありません。また、すべての URL の変更を実際に考慮しているわけではありません。URL が変更されるたびにルートが実行されない理由をデバッグするためにできることはありますか?