0

Google Closure ライブラリは、window オブジェクトを介してコンストラクターへのアクセスを提供するエクスポート シンボル オプションを提供します。

例: エクスポート タスクで実行できるようになりますwindow.task

しかし、これは Google クロージャ ライブラリとはまったくかけ離れています。Backbone.js を使用してタスク アプリケーションを構築しています。私のビュー、モデル、ルーターは多くのファイルに分割されており、上記のプロセスに従ってインスタンス、ソースをウィンドウ オブジェクトに割り当て、別のファイルにアクセスできるようにします。

  • ウィンドウからではなく、単一のアプリケーションのモデル、ビュー、ルーターにアクセスするにはどうすればよいですか? それらを一種のサンドボックス化するために採用したトリックやヒントは何ですか
4

2 に答える 2

2

ほとんどの場合、少なくとも 1 つのものをウィンドウに表示する必要があります。

ただし、名前空間を使用して支援することができます。

// app.js
var App = App || {};
App.Views = App.Views || {};
App.Models = App.Models || {};

App.Views.HomeView = Backbone.View.extend({});
App.Model.User = Backbone.Model.extend({});

必ずしも必要ではない唯一のケースは、requireJS を使用している場合です。

// app.js
define(['views/home'], function (home) {
    var home = new home({
        el: '#home'
    });
});
// views/home.js
define(['backbone'], function (Backbone) {
    var home = Backbone.View.extend({});
    return home;        
});

ただし、本当にやりたいのであれば、Self Executing Function 内ですべてを行うことができると思います。

(function ($, Backbone) {
    // Do your stuff here instead?.
    // Just keep in mind, nothing you do in here will be available outside.
    var home = Backbone.View.extend({});
    new home(); // Works...
}(jQuery, Backbone);
new home(); // FAIL!

唯一の問題は、関数内で行うことはすべて、関数外では利用できないことです。

実装について質問がある場合はお知らせください。

于 2012-06-15T11:56:09.317 に答える
1

グローバル スコープ (ブラウザでは別名「ウィンドウ」) や、名前空間を保持するその他のオブジェクトなど、何を使用しても、衝突の可能性は常にあります。他のものを使用すると、デフォルトのプロパティウィンドウが既に持っているものを気にする必要がなくなります。

モジュールのベスト プラクティスは、単一のオブジェクトのみを外部ビュー (窓などから) に公開し、他のすべてをプロパティとして保持することです。これにより、衝突の可能性が最小限に抑えられます。

于 2012-06-15T11:49:54.013 に答える