1

requirejsを使用したバックボーンアプリについてのこの記事に出くわしました。本当に奇妙に思えることが1つあります。モジュールでバックボーン、アンダースコア、またはjqueryの参照が必要な場合は常に、次のものを要求する必要があります。

define([
  'jQuery',
  'Underscore',
  'Backbone',
  'collections/projects',
], function($, _, Backbone, ProjectsCollection, projectsListTemplate){
  var projectListView = Backbone.View.extend({
    el: $("#container"),
...

それで、本当にそのように行く必要がありますか?少し過剰に設計されていませんか?アプリを起動する前にBackboneとその依存関係をロードして、requirejsなしで行うようにグローバルオブジェクトとして使用することはできませんか?または私がここで何かを逃しますか?

4

1 に答える 1

4

どちらの方法でも賛否両論があります。

アドバンテージ:

依存関係の管理は、同期的にロードされるグローバルスコープのライブラリに依存するのではなく、require.jsによって完全に制御されます。それはエレガントでモジュール式であり、おそらく物事を行うための正しい方法です。

アドバンテージ:

ライブラリのバージョン、特にモジュールごとに交換する方が簡単です。私は正直なところ、これを実際に見たことがありません。実際的なものというよりは、「もしも」の状況のようです。そうすると、とにかく何かを一緒にハッキングし、そもそもそれらをモジュールとして使用することで得られる「コードエレガンス」を犠牲にしていることになります。

不利益:

ボイラープレートのインポートがたくさんあります。

define(['jQuery', 'underscore', 'backbone', 'raphael', ...],

大規模なアプリでは、依存関係に到達するまでに5ダースのライブラリ依存関係が必要になる場合があります。すべてのモジュールで。

各モジュールがおそらくBackboneモデル/コントローラー/ビューを定義しているBackboneを多用するアプリでは、冗長性は特に不要だと感じます。ほとんどすべてのモジュールにBackboneが必要です。

それらすべてを、またはのように参照する単一のLibモジュールにラップすることもできますが、それはボイラープレートをインポートからコードに移動するだけです。また、利点#2を無効にします。Lib.$(...)Lib._(...)

それで、どれですか?

各ライブラリを個別に調べて、グローバルにするか、独自にインポートしたモジュールにするかを決定します。

ライブラリをほとんどすべての場所(jQuery、Backboneなど)で使用する場合は、グローバルに保持してください。

他のライブラリの場合は、いくつかのビュー(Raphael.jsなど)でのみ使用できます。その場合は、モジュールとしてインポートしてください。

于 2012-07-08T18:24:15.880 に答える