2

私は現在、BackboneJS と付属のものを学習しようとしていますが、実際に機能させることはできません。私の問題は、Backbone オブジェクトを使用しようとするとすぐに問題が発生することです。だから私はそれらの両方をログに記録しようとしました。

undefined main.js:23
undefined main.js:24

コードは以下です。

// RequireJS configuration.
require.config({
  paths: {
    // Major dependecies.
    jquery: 'libs/jquery/jquery-1.8.3.min',
    underscore: 'libs/underscore/underscore-min',
    backbone: 'libs/backbone/backbone-min',

    // Template dir.
    templates: '../templates'
  },

  // Append query string, to avoid browser caching, while in dev.
  urlArgs: "bust=" +  (new Date()).getTime()
});

// Start application.
require([
  'underscore',
  'backbone'
//  'router'
], function(_, backbone) {
  console.log(backbone);
  console.log(_);
//  Router.initialize();
});

ご覧のとおり、ルーターで Backbone オブジェクトを使用しようとしましたが、失敗しました。次に、main.jsで同じことを試しました。

4

3 に答える 3

6

Backbone と Underscore はそのままでは AMD をサポートしないため、require shim を使用する必要があります。

require shim を使用すると、AMD 以外のモジュールをロードできます (こちらを参照)。exportsobject は、モジュールとして使用されるオブジェクトの名前であることに注意してください。

paths: {
      // Major dependecies.
      jquery: 'libs/jquery/jquery-1.8.3.min',
      underscore: 'libs/underscore/underscore-min',
      backbone: 'libs/backbone/backbone-min',

      // Template dir.
      templates: '../templates'
},
shim: {
    backbone: {
        deps: ["underscore", "jquery"],
        exports: "Backbone"
    },

    underscore: {
        exports: "_"
    }
}

別の方法として、スクリプトを HTML に直接含めることもできます。

<script src="libs/jquery/jquery.js"></script>
<script src="libs/underscore/underscore.js"></script>
<script src="libs/backbone/backbone.js"></script>
于 2012-12-18T19:51:31.737 に答える
2

個人的には、バックボーン (およびアンダースコア、jQuery) を Require から除外する方がはるかに簡単であることがわかりました。それらを通常の方法で (script タグを介して) ロードし、その後すべての Require ロードを実行すると、すべてが完全に機能します。いくつかのグローバル変数 ($、_、および Backbone) がありますが、それ以外に、このアプローチの欠点を見つけました。

あるいは、バックボーンを Require-land に適切に移動させるために、シムなどをいじって多くの時間を無駄にすることもできます...しかし、そうする必要がなければ、なぜその時間を無駄にするのでしょうか? さらに、そのようにすると、すべてのファイルの定義呼び出しに jQuery/Backbone/Underscore を含める必要があり、時間とエネルギーの無駄になります。

于 2012-12-18T19:51:27.557 に答える
0

require.js を介してファイルを参照している方法にエラーがあると思われます (または、require でバックボーンがうまく機能しません)。ブラウザの開発者ツールをチェックして、実際にファイルをダウンロードしていることを確認してください。「コンソール」または「ネット」タブは、ファイルを正常に取得しているか (HTTP コード 200)、ファイルが見つからないか (HTTP コード 404)、試行すらしていないか (「ネット」に行がない) を示す必要があります。まったく)。

さらに、require.js をループから完全に取り除き、標準<script>タグを使用してファイルをページに直接ロードしてみてください。そうすれば、ファイルと変数が期待どおりに機能することがわかります。

于 2012-12-18T19:53:07.727 に答える