5

構築中のアプリケーションに RequireJS で BackboneJS を使用しています。

Appファイルはルーターを初期化します:

// Define application router
var router = new AppRouter();
Backbone.history.start();

次に、ルーターがシステム アクションを制御します。

var App = Backbone.Router.extend({

    routes: {

        "project/:id": "getProject",
        "projects": "getProjects",
        "*actions": "defaultRoute"
    },

    getProject: function (id) {
       // dashboard.set('some_key', 'some_value');
    },

    getProjects: function () {
       // dashboard.set('some_key', 'some_value');
    },

    defaultRoute: function () {
       // dashboard.set('some_key', 'some_value');
    }

});

Dashboardシステムの状態に関するグローバルな情報をいつでも表示するために使用するモデルとビューを追加しました。(これはウィンドウの上部に配置されます)。そのビューは、モデルの値の変更を監視し、必要に応じて再レンダリングします。これはうまくいきます。

最初のオブジェクトのインスタンス化の後、これを書き直す必要はありません。

var dashboard = new DashboardModel();
var dashboardView = new DashboardView({ model: dashboard });
$('#dashboard-placeholder').html(dashboardView.render().el);

ただし、必要なのは、このオブジェクトにどこからでもアクセスできることです (Dashboardモデルのインスタンス)。現時点では初期化してAppいますが、これを行うとルーターでアクセスできません。ルーターが実行する適切なタスクとは思えないため、ルーターで定義したくありません。

Dashboardモデルのこのインスタンスをどこで、どのように定義すればよいですか?

4

2 に答える 2

2

シングルトンは当然の選択ですが、新しいモジュール定義でモデルのインスタンスを作成することもできると思います。

define("MyX", "MyXModel", function(MyXModel){
    return new MyXModel();
});

AMDjs API ドキュメントを参照してくださいhttps://github.com/amdjs/amdjs-api/wiki/AMD#factory-

于 2014-04-20T15:15:03.850 に答える