web-dev-qa-db-ja.com

Ember-ルートアクション内でルートモデルを取得する方法

ルートアクション内のルートモデルにアクセスすることは可能ですか?

ルートモデル内の複数のオブジェクトをテンプレートに渡します。

 model: function() {
    return {
        employeeList : this.store.findAll("employee"),
        employee : Ember.Object.create()
    }
}

ルートアクションから、ルートmodel.employeeを変更したいと思います。以下を試しましたが、オブジェクトが取得されません。

actions:{
    editAction : function(id) {
        var emp = this.get("model");
        console.log(emp.employee);

    }
}

誰かがモデルオブジェクト(従業員)を取得して変更するためのソリューションを提供できますか?

13
Manu Benjamin

最初の問題は、モデルフックからpromiseを返す必要があることです。そうすれば、移行は解決の約束を待ちます。 _return { /*...*/};_は、オブジェクト自体にPromiseが含まれている場合でも、Promiseではなくオブジェクトを返します。解決策は、次のように_Ember.RSVP.hash_を使用することです。

_model() {
  return Ember.RSVP.hash({
    employeeList: this.store.findAll('employee'),
    employee: Ember.Object.create()
  });
}
_

これにより、すべての内部プロミスが解決されたときに解決されるプロミスが返されます。


2番目の問題は、ルートでthis.get('model')を使用できないことです。考えてみれば、modelプロパティはフック自体であり、解決されたモデルではありません。ソリューション:

  1. そのアクションは、コントローラー/テンプレートから送信されます。モデルをパラメーターとして渡すことはできませんか?そうすれば、関数の引数を介してモデルにアクセスできます。
  2. どうしても必要な場合は、this.modelFor(this.routeName);が現在のルートのモデルを返します。
  3. this.controller.get('model')のようなコントローラーを介してルート内のモデルにアクセスできます。
  4. setupController フックを実装して、そこにモデルにアクセスすることもできます。その後、後でアクセスするためにthis.set('employeeModel', model);のようなことを行うことができます。
31
miguelcobain
this.get('context')

ルートアクションでモデルにアクセスできます。

1
steve_gallagher