2013-09-23 9 views
9

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

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の文書で読んだところでは、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を使用する利点はありますか?

答えて

11

あなたは、あなたがこれを行うことができます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' }) 
     }); 
    } 
}); 

はエンバーhereで約束あなたの答えのための

+1

+1はRSVP.hash()です。優れた答えは、私が必要としたものです - ありがとう! – rog

3

実際の約束ではなく、2つの約束を含むオブジェクトを返します。 あなたが必要とするのは、内部の約束事が解決された時点で解決される、あなた自身の約束(Ember.RSVP.Promise)を構築することです。

+0

おかげについては、こちらをご覧ください。私は約束を1つだけ持つべきだと理解していますが、私のresolve()関数が何をしているのかわかりません...私はAjax呼び出しなどを連鎖するべきですか? – Pedro

+1

連鎖の必要はありません。各成功コールバックで、他の約束がすでに解決されているかどうかを確認します。もしそうなら、外側の約束を解決してください。 –

関連する問題