1

私のhtmlに次のようにjQueryが含まれているrequire.jsをロードします。

<script data-main="requires" src="lib/require-jquery.js"></script>

私のrequires.jsの内容:

require.config( {
      paths: {
            "jquery.mobile": "lib/jquery.mobile",
            "jquery.mobile.router": "lib/jquery.mobile.router"

      },
      shim: {
            "jquery.mobile" : {
                "exports": "$.mobile"
            },
            "jquery.mobile.router": {
                  "deps": [ "jquery.mobile" ],
                  "exports": "$.mobile.Router"
            }

      }

} );

require(["jquery.mobile.router" ], function() {
    require(["router"]);
} );

そして、私の router.js で、jquery モバイル ルーター プラグインの新しいインスタンスを作成します。

router = new $.mobile.Router(...);

これは私にこのエラーを与えます:

キャッチされていない TypeError: undefined は関数ではありません

$ と $.mobile を出力すると、両方とも定義されており、$.mobile.Router だけが未定義です。

ここで私は何を間違えましたか?

4

2 に答える 2

2

私の問題は、jquery.mobile.router の依存関係として jquery.mobile を追加したことです。したがって、jQuery モバイルが最初にロードされます。ルーターのドキュメントには次のように記載されています。

jQuery Mobile ルーターの JavaScript ファイルは、jQuery Mobile の前にロードする必要があります。

これは、問題を解決するためにrequires.jsを変更した方法です:

require.config( {

    paths: {
        "jquery.mobile": "lib/jquery.mobile",
        "jquery.mobile.router": "lib/jquery.mobile.router"
    },

    shim: {
        "router": {
            "deps" : ["jquery.mobile"]
        },
        "jquery.mobile" : {
            "deps" : [ "jquery.mobile.router"],
            "exports": "$.mobile" 
        },

        "jquery.mobile.router": {
          "exports": "$.mobile.Router"
        }
    }
});

require(["router"]);

これで、router.js が必要になり、jquery.mobile と jquery.mobile.router を依存関係としてロードするだけです。読み込み順序は次のとおりです。

  1. jquery.mobile.router
  2. jquery.mobile
  3. ルーター
于 2013-02-12T08:40:47.923 に答える
1

ファイルでこれを試してくださいrouter.js:-

define(["jquery", "jquery.mobile.router"], function($) {
    // your js code in router.js
} );

jquerydefine 呼び出しで指定し$て引数として渡すことにより、で定義された jquery オブジェクト$と関連する関数jquery.mobile.routerがコードのスコープ内で使用できるようになります (ファイルrouter.js全体に含まれています)。

于 2013-02-12T07:52:55.887 に答える