5

DashboardIndexViewのDashboardIndexControllerからデータにアクセスしようとしています

JP.DashboardIndexController =  Ember.Controller.extend({
  users: []
});

didInsertElementのJP.DashboardIndexViewでユーザーにアクセスすることは可能ですか?

didInsertElement : function(){
    console.log(this.get("controller.users").objectAt(0));
}

これは私のDashboardIndexRouteです:

JP.DashboardIndexRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    controller.set('users',  JP.User.find());
  }
});

ありがとうございました

編集

console.log(this.get("controller.users").objectAt(0));

UsersIndexに行ってから戻ったときにのみデータを返しますDashboardIndex...初期化されたものだと思いますが、修正方法がわかりません。

4

1 に答える 1

9

はい、これがユーザーのリストにアクセスする方法です。

これは、サーバーからのデータが入力DashboardIndexViewされる前にがDOMに挿入されるために発生controller.usersします。

したがって、ビューがレンダリングされ、controller.usersまだ空であり、ajaxリクエストの終了後に非同期でデータが入力される場合、問題はdidInsertElementすでに発生しています。

これを解決するにはcontroller.users、別のフックからアクセスする必要があります。 ロードが終了したDidInsertElementかどうかに関係なく発砲するため、間違った場所です。JP.User.find()

JP.User.find()ビューがすでにDOMにある場合でも、ロード時に再起動することを確認する必要があります。このようなもの:

JP.DashboardIndexView = Ember.View.extend({
  didInsertElement: function() {
    this.usersChanged();
  },
  usersChanged: function() {
    if (!this.$()) { return; } // View not in DOM
    console.log(this.get('controller.users'));
  }.observes('controller.users.@each')
});
于 2013-03-25T12:04:35.237 に答える