0

Ember Route で usersArr を使用できない理由を誰か教えてもらえますか? 以下のアラートを参照してください。

App.UsersIndexRoute = Ember.Route.extend({
setupController: function (controller, model) {

    var usersArr = App.userService.findUsers(); // there are 10 items in this
    var arrControl = Ember.ArrayController.create({
        content: usersArr,
        sortProperties: ['id'],
        sortAscending: true
    });

    // begin:  my test code
    alert('usersArr.length: ' + usersArr.length); // displays "0"
    // end:  my test code

    controller.set('currentPage', {label: 1, startItem: 0});
    controller.set('content', arrControl);
}

});

コントローラーとページには、usersArr データが正常に表示されます。しかし、Route.setupController() メソッドでアクセスする方法がわかりません。サブテンプレート用にスライスしたい。何か案は?

4

1 に答える 1

1

長さが 0 と表示される理由は、実行するfind() Emberと、長さが 0 のオブジェクト (約束) ですぐに応答しますが、バックグラウンドEmberでデータベースを使用してクエリを実行し、要求が成功すると、そのオブジェクトにレコードが入力されるためです。

これは非同期に発生します。つまり、javascript は、データがロードされるのを待つ代わりに、メソッドの残りの行の実行を開始しますが、ember は 、レコードのロードがいつ完了したかを正確に知るためのフラグを提供するので、それをto doisLoadedと組み合わせることができます。observerレコードの読み込みが完了したら、詰め込みます。

あなたの場合、私はそうします

App.UsersIndexRoute = Ember.Route.extend({
  setupController: function (controller, model) {

      this.set('usersArr', App.userService.findUsers()); // there are 10 items in this
      /* your code */
  },
  notify: function(){
    alert(this.get('usersArr.length'));
  }.observes("usersArr.isLoaded")
});

テンプレート内で正常に動作する理由は、デフォルトのハンドルバー ヘルパーがバインドを認識しており、Ember更新を処理してくれるためです...

于 2013-05-20T13:28:15.637 に答える