4

私の Ember.js アプリケーションでは、ユーザーは複数のプロジェクトを持つことができます。一度に表示できるプロジェクトは 1 つだけなので、ナビゲーション バーからアクティブなプロジェクトを選択します。これは基本的にグローバルな状態です (これは URL にも反映されます/projects/xyz)。

複数のコンポーネントがプロジェクトの選択に依存するため、この情報をどこに入力すればよいですか? そして、どのような形式で保存しますか (インスタンスまたは ID)?


私の現状について: for の呼び出しをインターセプトし、インスタンスをグローバル名前空間に配置するsetupControllerため/projects/:project_idに使用するルートがあります。App.set("projectId", model)これは悪いようですね。

4

1 に答える 1

8

URL に反映されるグローバルな状態がある場合はいつでも、ember ルーターを使用してその状態を管理できます。

たとえば、次のようにプロジェクトの下にタスク リソースがネストされているとします。

App.Router.map(function() {
  this.resource('project', { path: '/projects/:project_id' }, function() {
    this.route('edit');
    this.resource('tasks', function() {
      this.route('new');
    });
  });
});

Ember は project_id url セグメントを使用してモデルを検索し、それを ProjectController のコンテンツとして設定します。現在選択されているプロジェクトに別のコントローラーからアクセスするには、needs配列を使用して依存関係を宣言し、controllersプロパティを介してアクセスします。

App.TasksController = Ember.ArrayController.extend({
  needs: ['project']
});

// tasks/index.hbs
Project name: {{controllers.project.name}}

controllers-needs-explainedを参照してください

于 2013-02-08T18:44:59.267 に答える