2

従おうとしていたいくつかのチュートリアルに基づいて、コードが想定どおりに機能しない理由を突き止めるために、過去数時間を費やしました。つまりね。Backbone での Require.js の使用に関する多くのチュートリアルや記事には、次のようなコードがあります。

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});

このコードを実行しようとすると、コンソールに「Backbone is undefined」と表示されます。奇妙なことは、jQuery オブジェクトが正常に $ にインスタンス化されたことです。未定義の「_」と「バックボーン」だけでした。だから私はいくつかの検索を行い、use.jsに出くわしました

backbone の主な貢献者が、require.js に適合させるためだけに Backbone.js のコードを変更したくなかったため、use.js が誕生したとのことで、理解しています。そこで、use.js を使用して、require の構成内でバックボーンの依存関係の設定を次のように指定しようとしました。

require.config({
  use: {
    'backbone': {
      'deps': ['use!underscore', 'jquery'],
      'attach': 'Backbone'
    },
    'underscore': {
      'attach': '_'
    }
  }
});

そして、このコードを追加し、「アンダースコア」と「バックボーン」を要求する代わりに元の定義から「use!backbone」を呼び出すと、最終的に機能します。しかし、ここで何が起こっているのかわかりません。Backbone を機能させるためにこのすべての作業を行わなければならない場合、なぜそれらすべての記事やチュートリアルでこの事実が言及されていないのでしょうか? これをすべて行わなくても、彼らのバージョンは正常に動作するようです。何か変わった?

また、バックボーンを処理するためにrequire.jsを使用する唯一の方法ですか? もっと簡単な方法はありますか?(最新の方法)

4

3 に答える 3

1

多分この情報はあなたを助けるでしょう...

// This set's up the module paths for underscore and backbone
require.config({ 
    'paths': { 
        "underscore": "libs/underscore-min", 
        "backbone": "libs/backbone-min"
    },
    'shim': 
    {
        backbone: {
            'deps': ['jquery', 'underscore'],
            'exports': 'Backbone'
        },
        underscore: {
            'exports': '_'
        }
    }   
}); 

require([
    'underscore',
    'backbone',
    'app'
    ], 
    function(_, Backbone, app){
        app.init();
});

http://jcreamerlive.com/2012/07/14/using-backbonejs-and-amplifyjs-in-a-requirejs-2-0-application/
https://github.com/jcreamer898/RequireJS-Backbone-Starter

于 2012-10-31T14:16:50.610 に答える
0

RequireJS 2.0 を使用している場合は、このshim機能を使用して AMD 以外のモジュールを含めることができます。

次の記事が役立つ場合があります。

https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim

于 2012-10-31T13:12:19.217 に答える
0

これを行う

define('backbone', [], function(){ return window.Backbone;});

このようにして、バックボーンとは何かを定義し、バックボーンがウィンドウに接続されます。これは、require を最初にセットアップする場所で行います。バックボーンを初期化した後、バックボーンを定義します。

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});

それが役立つことを願っています!

乾杯!スジ

于 2013-03-08T15:35:08.720 に答える