1

Jquery Mobile、Backbone、および RequireJS を使用してサイトを作成しようとしています。しかし、私が抱えている問題は、サイトがランダムに壊れることと、壊れた理由が異なることです。

  • JQueryは未定義です
  • バックボーンは未定義です
  • バックボーンの拡張ビューが定義されていません
  • などなど

また、時々機能するため、その理由を特定することはできませんが、更新すると突然機能しなくなります。私はこのようにコードをロードしています(ライブラリの後にビューが続きます):

requirejs(["/js/libs/jquery-1.8.3.min", "/js/libs/jquery.mobile-1.2.0.min", "/js/libs/underscore-1.4.3", "/js/libs/json2", "/js/libs/backbone.0.9.9"], function($,JQM, underscore, json2, bb) {

});

requirejs(["/js/views/pageview", '/js/views/home'], function(util) {

    HomeView = new HomeView({el : '#home', 'id' : 'home'})
});

このようにして何か間違ったことをしていますか?

4

1 に答える 1

4

jQuery Mobile、Backbone、Underscore などのライブラリは、AMD モジュールではなく、単なる古い JavaScript ファイルです。また、それらはモジュールではないため、依存関係を宣言せず、グローバル スコープで$orを見つけることを期待しています。_

RequireJS の読み込み順序は不確定であるため、どちらが最初に読み込まれるかはわかりません。Backbone が最初に評価されると、探している が見つからず、window._クラッシュします。

RequireJS は、shim 構成 ( docs を参照)を介して非 AMD モジュールをサポートします。これにより、これらのライブラリ間の依存関係を宣言できます。shim を構成した後、RequireJS は、依存するライブラリよりも先に、依存するライブラリをロードする方法を認識します。

shim 要素を含む典型的な RequireJS 構成は次のようになります。

requirejs.config({
  //libraries
  paths: {
      jquery:       'libs/jquery/jquery',
      backbone:     'libs/backbone/backbone',
      underscore:   'libs/underscore/underscore',
      jquerymobile: 'libs/jquery.mobile-1.2.0/jquery.mobile-1.2.0',
  },

  //shimming enables loading non-AMD modules
  //define dependencies and an export object
  shim: {
      jquerymobile: {
          deps: ['jquery'],
          exports: 'jQuery.mobile'
      },
      underscore: {
          exports: '_'
      },
      backbone: {
          deps: ['jquerymobile', 'jquery', 'underscore'],
          exports: 'Backbone'
      }
  }
});

このpaths部分は必須ではありません。ファイル パスをshimセクションのキーとして使用できます。ただし、pathsエイリアスを使用すると、パス全体ではなく短い名前でこれらのライブラリをインポートできます。

define(['jquery', 'backbone'], function($, Backbone) { ... });
于 2013-01-07T22:46:48.667 に答える