10

2 つのカテゴリ (ニュースとイベント) から 2 つのブログ投稿の 2 つのリストを取得し、それらをホームページの 2 つの異なる列に表示しようとしています。これらのブログ投稿を取得するには、2 つの別々の Ajax 呼び出しを実行する必要があります。このシナリオでは ember-data を使用する利点が見当たらないため、この操作には ember-data を使用しません (ただし、間違っている可能性があります)。

export default Ember.Route.extend({
  setupController(controller, model) {
    var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

    Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
      controller.set('news', data.posts);
    });
    Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' }).then(function (data) {
      controller.set('events', data.posts);
    });
  }
});

上記のコードは機能します。しかし、Ember のドキュメントで読んだことから、promise を利用するには、これらのデータをmodel( ではなく) フックで取得する必要がありsetupControllerます。だから私は自分のコードをこのように書き直そうとしました:

export default Ember.Route.extend({
  model() {
    var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

    return {
      news: function () {
        return Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
          return data.posts;
        })
      },
      events: function () {
        return Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' }).then(function (data) {
          return data.posts;
        })
      }
    };
  }
});

しかし、これはうまくいきません。Ajax 呼び出しは完了しましたが、ページがレンダリングされた後では遅すぎます。ここで何が間違っているのかわかりません。そのシナリオで ember-data を使用する利点はありますか?

4

2 に答える 2

13

Promises のハッシュを返すことができますRSVP.hash()

あなたはこれを行うことができます:

export default Ember.Route.extend({
    model() {
        var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

        return new Ember.RSVP.hash({
            news: Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }),
            events: Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' })
        });
    }
});

Ember のプロミスの詳細については、こちらをご覧ください

于 2013-12-16T08:17:16.383 に答える
2

実際の promise ではなく、2 つの promise を含むオブジェクトを返します。必要なのは、両方の内部の約束が解決されると解決される独自の約束 (Ember.RSVP.Promise) を作成することです。

于 2013-09-24T08:01:09.363 に答える