2

私はしばらくの間、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}},
    ]);

しかし、これはルータープラグインを使用する正しい方法ですか? ドキュメントを読んだところ、作者は実際のコントローラーとしてルーター オブジェクトを使用しているようです。

明確にするために、これは私にとってはうまくいきますが、これが本当にルーティングのアイデアなのか、それともおそらくこれが間違ったアプローチなのかわかりません。

4

1 に答える 1

3

心配しないでください。ルーターを使用する「正しい方法」はありません。あなたのアプローチは正しいです。

同じことを行う別の方法は次のとおりです。

var router = new $.mobile.Router([
    {"#foo-page": {events:"i", handler: "init"}},
    etc
],myApp.foo.controller);

それはただの好みの問題です。

于 2012-09-06T11:01:23.420 に答える