私はしばらくの間、JQM を楽しく使用しています。しかし、私は最近、動的に作成されたページを履歴にプッシュする必要がある新しいプロジェクトを開始し、コンテンツは URL パラメータによって決定されました。私が最初に JQM を使用してコントローラーにアプローチした方法と、ルーター プラグインにアプローチしようとした方法を紹介します。
これは、JQM 用のすべてのコントローラーを作成するために使用した方法です。
myApp.foo.controller = (function($){
"use strict";
var $page;
var init = function()
{
$page = $("#foo-page");
applyBindings();
};
var applyBindings = function()
{
// Page transition events
$page.bind("pagebeforeshow", onPageBeforeShow);
};
var onPageBeforeShow = function()
{
};
return {
init: init
}
})(jQuery);
$("#foo-page").live("pageinit", function(e)
{
myApp.foo.controller.init();
});
そこで、JQM 推奨のルーティング プラグインを使用しています。背骨やバックボーンは使用していません。そして、これはアプリの基本であるため、誤解したくありません。そのため、すべてのコントローラーをロードしてから、router.js ファイルをロードします。
これにより、私が期待している動作が得られます:
var router = new $.mobile.Router([
{"#foo-page": {events:"i", handler: myApp.foo.controller.init}},
{"#foo-page": {events:"s", handler: myApp.foo.controller.onPageShow}},
{"#dynamic-foo(?:[?/](.*))?": {events:"i", handler: myApp.dynamicFoo.controller.init}},
{"#dynamic-foo(?:[?/](.*))?": {events:"bs", handler: myApp.dynamicFoo.controller.onPageBeforeShow}},
]);
しかし、これはルータープラグインを使用する正しい方法ですか? ドキュメントを読んだところ、作者は実際のコントローラーとしてルーター オブジェクトを使用しているようです。
明確にするために、これは私にとってはうまくいきますが、これが本当にルーティングのアイデアなのか、それともおそらくこれが間違ったアプローチなのかわかりません。