2

私はBackboneプロジェクトに取り組んでおり、 RequireJS を使用してロードjQueryUnderscoreBackboneます

すべてのモジュールでこのパターンを何度も入力していることに気づきました。

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...

これら 3 つのライブラリを明示的に要求せずにすべてのモジュールで使用できるようにする方法または回避策はありますか?

この依存関係スタックをスクリプト タグ内にロードし、モジュールと追加の依存関係に RequireJS を使用することについて考えましたが、JamJSjquery、アンダースコア、およびバックボーンを自分で連結する必要があるため、コンパイル機能が失われます。

編集:

Backbone Boilerplateを参照してください: 彼らも JamJS を使用していますが、各ファイルに backbone、underscore、jquery は必要ありません。どういうわけか、それはそれらすべてに利用可能です。

config.jsRequireJS を使用したマークアップ内のファイルが必要です。これはrequire.configのものをエクスポートし、次に委任しmain.jsます。main 内では、魔法のようにBackboneにアクセスできます。

途中で何が起こったのですか?

4

2 に答える 2

1

コメントで述べたように、サンドボックスがあります。コーヒースクリプトのサンプルは次のとおりです。

define [
  "core"
  "jquery"
  "extensions/backbone"
  "underscore"
], (core, $, backbone, underscore) ->

  util: 
    underscore: underscore
  mvc:
    Model: backbone.Model
    Collection: backbone.Collection
    View: backbone.View
    Events: backbone.Events
    Router: backbone.Router

これにより、私はすることができます

define ["sandbox"], (sandbox) -> class View extends sandbox.mvc.View

これは、AuraJS プロジェクトで使用されているサンドボックスと、次の利点を持つファサード パターンの実装に似ています。

API 全体を公開する代わりに、安全に使用できる JavaScript ライブラリの部分を公開できます。これは、チームで作業する場合に特に役立ちます。

また、将来、Backbone.View から直接ではなく、BaseView クラスからすべてのビューを拡張したい場合は、サンドボックスで参照を変更するだけです。

于 2013-03-23T19:19:47.217 に答える
0

こんにちは、SHIMConfigを使用してグローバルにアクセス可能にすることができます

そこからの例:

shim: {
    'backbone': {
        //These script dependencies should be loaded before loading
        //backbone.js
        deps: ['underscore', 'jquery'],
        //Once loaded, use the global 'Backbone' as the
        //module value.
        exports: 'Backbone'
    },
于 2013-03-23T00:20:27.430 に答える