3

バックボーンにプロジェクトがあり、require.jsを使用してコードをモジュール化しています。

私のmain.jsは次のようになります:

require.config({
    paths:{
        jquery:'../../../../core/js/external/jquery/jquery-1.8.2',
        underscore:'../../../../core/js/external/underscore/underscore',
        backbone:'../../../../core/js/external/backbone/backbone',
        text:'../../../../core/js/external/require/text',
        backbone_paginate:'../../../../core/js/external/backbone/backbone.pagination',
        'jquery.sprites':'../../../../core/js/sprites',
        'jquery.sprite_util':'../../../../core/js/util/spriteUtil'


    },
    shim:{
        'backbone':{
            deps:['underscore', 'jquery'],
            exports:'Backbone'
        },
        'underscore':{
            exports:'_'
        },
        'jquery.blades':{
            deps:['jquery']
        },

        'jquery.sprites':{
            deps:['jquery']
        },
        'jquery.sprite_util':{
            deps:['jquery.sprites']
        }
    }
    }
});
require(['../app'], function (AppView) {
    "use strict";
    new AppView();
});

したがって、ここでjquery.spritesとjquery.utilsは、ビューに含めずに使用する必要のあるプラグインです。現在、使用されている場所ならどこにでも含める必要があります。例:

define([
  'jquery',
  'underscore',
  'backbone',
  'views/SimpleNamedObjectView',
  'jquery.sprites',
  'jquery.sprite_util',


], function($, _, Backbone, SimpleNamedObjectView){
  "use strict";

すべてのビューに含めずにjquery.spritesとjquery.sprite_utilにアクセスできる方法はありますか?main.jsからのすべてのビューに対してグローバルになり、すべてのビューにプラグインを含めずにこれらのプラグインの機能を使用できるようにすることはできますか?たとえば、this。$ el.getSprites(); (getSpritesはjquery.spritesのメソッドです)

4

1 に答える 1

3

ロードされると、「シム」されるため、グローバルに利用できるようになります。

requireしたがって、内部のブートストラップ呼び出しで依存関係としてそれらを呼び出すことができますmain.js。これはうまくいくでしょう。

しかし!これは、Require.jsとAMDの哲学に完全に反しています。各モジュールは、すべての依存関係を宣言して、すべてを個別にロードしてそのまま動作できるようにする必要があります。これにより、ユニットテストも簡単になります。

だから、はい、できますが、実際にはこれを行うべきではありません

于 2012-12-21T02:15:46.087 に答える