1

Ajaxナビゲーションを追跡するためにYUIブラウザー履歴マネージャーを使用しています。私は次のような履歴オブジェクトを登録しています:

YAHOO.util.History.register("state",init, onStateChange);

ここで、onStateChangeが呼び出されます。

YAHOO.util.History.navigate("state",urlhash);

戻るボタンを押すと。

onStateChangeが戻るボタンで呼び出されたか、navigateを呼び出すことで呼び出されたかを知る方法はありますか?

4

1 に答える 1

1

このイベントを外部システム(この場合はブラウザーの戻るボタン)から呼び出すことができ、独自のコードによって呼び出すことができる場合は、独自のコードがメソッドを呼び出すときに何か特別なことを行うように要求することで、呼び出し元を区別できます。独自のヘルパーメソッドでnavigate()の呼び出しをラップすると、これに一貫性を保つことができます。

YUIドキュメントでは、register()がオプションの4番目のパラメーター(とりわけ)を受け取ることができることがわかります。これは、onStateChangeハンドラー関数に渡される任意のオブジェクトです。このオブジェクトのプロパティの1つは、ブラウザによって開始されたのではなく、コードから呼び出されたことを示すフラグである可能性があり、navigate()ラッパーでは常にそのフラグを設定します。ハンドラーに戻すことを忘れないでください。

注:私はExtJSほどYUIに精通していません。おそらく、APIをよく知っている教祖が役立つかもしれませんが、これは機能する一般的な戦略です。この答えは、navigate()を呼び出すと、他のナビゲーションが発生する前にハンドラーが確実に起動するというエレガントでない仮定を立てています。これは、シングルスレッドのJavaScriptの世界ではおそらく安全な方法です。

于 2012-05-14T18:27:36.027 に答える