ルートを使用して、sencha touch 2 アプリケーションを構築しています。私が直接理解している場合、これにはコントローラーでルートを指定し、 app.launch 関数を空のままにする必要があります (または、少なくとも、ビューをロードしたり、コントローラーを呼び出したりしないでください)。
私のコントローラーの 1 つは "" ルートを指定します。このルートは、URL ハッシュ部分が空の場合に読み込まれます ( http://localhost/
):
Ext.define('SOP.controller.PartyController', {
extend: 'Ext.app.Controller',
config: {
routes: {
"": "showChooseParty"
ここまでは順調ですね....
ただし、この場合、ハッシュ部分にジャンクが含まれている場合 (たとえばhttp://localhost/#tralala
、どのコントローラーにも tralala ルートが指定されていない場合)、アプリはロード画面でハングするだけです。アクションは呼び出されず、起動関数は空です。私が望むのは、ハッシュ部分が既知のルートと一致しない場合にロードされるルートです (ハッシュ部分のジャンクは、アプリの以前のバージョンのルートであるか、Facebook がハッシュでアクセストークンを提供して満足させようとしている可能性があります)リダイレクトで)。
起動機能で回避策が機能しています:
launch: function () {
if (!this.getRouter().recognize(window.location.hash.substr(1))) {
window.location.hash = "";
}
},
ただし、ハッシュを直接指すコードは好きではありません。その動作は、ルートが初めて一致する前に呼び出される launch() に依存しており、 this.getRouter() オブジェクトは「プライベート」であり、想定されていません使用されます。
だから私の質問、デフォルトルートを提供する「正しい」方法は何ですか? または、ルートを使用するポイントを完全に見逃していますか?