2

私は Backbone の初心者で、今日 AMD の学習を始めたばかりです。RequireJS の Web サイトから RequireJS-jQuery ライブラリをインストールしました。これが私のスクリプトタグで、Laravel パス呼び出しが含まれています。

<script data-main="{{ path('js/main') }}" 
src="{{ path('js/libs/requirejs/require-jquery.js') }}"></script>

すべてが正しく読み込まれるようにしようとしているのでconsole.log、依存関係を試しています。バックボーンは問題なくオブジェクトを返します。アンダースコアと jQuery はそうではありません。これが私のmain.jsファイルです:

  require.config({
    baseUrl: '../js/',
    paths: {
        jquery: 'libs/jquery/jquery-1.8.3.min',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-min'
    }
});

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
  define( 'jquery', [], function () { return jQuery; } );
}

//the "main" function to bootstrap your code
require(['jquery', 'underscore', 'backbone', 'app'],
    function () {  
        var App = require('app');
        //App.initialize();
        console.log($);
        console.log(_);
        console.log(Backbone);
});

いくつか質問があります。jQuery は RequireJS-jQuery ライブラリの一部であるため、jQuery のパスが必要ですか? 2、これはシミングについて何ですか? これを機能させるには、これをシムする必要がありますか? RequireJS-jQuery の v 2.1.4 を使用しています。

この投稿に従ってみましたが、機能しませんでした。AMD バージョンの Backbone と Underscore を使用しています。Underscore と jQuery を使用しないのはなぜconsole.logですか?

4

1 に答える 1

2

require.js を介してファイルを要求する場合、IIFE に引数を定義させるために、標準の AMD 定義に準拠する必要があります。

たとえば、jQuery ライブラリでは、エクスポート定義が追加されています。

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
  define( "jquery", [], function () { return jQuery; } );
}

$これにより、IIFE で参照できます。

Shimming はエクスポート定義 (上記の jQuery と同様) を追加するため、必要に応じて _、$、および Backbone で適切な参照を指すことができますが、個人的には、引数に依存する代わりに、グローバルに評価し、依存関係に必要なシムをセットアップします。それ以外の場合は、自分のすべてのモジュール (各ファイルを AMD モジュールとして定義する場合) に対して、インラインの require 定義を使用します。

例えば:

require(['jquery','underscore','backbone', 'my-module'],function(){
    var MyModule = require('my-module');
});

うまくいけば、上記は理にかなっています。

~ 上記のコードに基づいて、次を試してください。

require(['jquery', 'underscore', 'backbone', 'app'],
    function () {  
        var App = require('app');
        //App.initialize();
        console.log($);
        console.log(_);
        console.log(Backbone);
});
于 2013-01-24T20:10:32.770 に答える