2013-08-03 72 views
0

使用Ember RESTadapter時,在什麼時候執行JSON調用?Ember和RESTadapter:何時執行JSON調用?

例1:

  • 如果我轉到/index.html#/articles/,執行JSON調用資源的文章。
  • 當我然後瀏覽到/index.html#/articles/2時,不會執行額外的調用。
  • 我期待通過JSON調用單個文章。

例2:

  • 當後應用負載,我馬上去/index.html#/articles/1,2個JSON調用執行:一個文章和一個文章/ 1。
  • 但是,當循環播放文章集合(使用#each)時,只有文章1完成了數據。
  • 爲什麼要完成2個調用,爲什麼只加載一個文章的數據?

我的路線:

App.ArticlesRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Article.find(); 
    } 
}); 

App.ArticlesShowRoute = Ember.Route.extend({ 
    model: function (params) { 
    return App.Article.find(params.article_id); 
    } 
}); 

希望有人能給我基本解釋或其他幫助的鏈接。

非常感謝 馬克

回答

2

如果我轉到/index.html#/articles/,執行JSON調用資源的文章。

這是正確的,因爲適配器將獲取所有文章。

當我然後瀏覽到/index.html#/articles/2時,不執行額外的調用。

這也是正確的,因爲這些文章已經在商店中,並將從那裏送達。

你們各自的路由器地圖應該是這樣的:

App.Router.map(function() { 
    this.resource('articles', function() { 
    this.route('show', {path: '/show/:article_id'}); 
    }) 
}); 

這會讓你的ArticlesShowRoute過時,因爲它是默認的行爲。如果您需要與默認行爲不同的東西,則只需明確定義您的ArticlesShowRoute

當應用程序加載後,我馬上轉到/index.html#/articles/1,2執行JSON調用:一個是文章,另一個是文章/ 1。

這可能是多餘的...

但是,當循環播放文章集合(使用#each)時,只有文章1完成了數據。

此時,你應該能夠遍歷您的文章收集並鏈接到相應的文章顯示:

{{#each article in model}} 
    {{#linkTo 'articles.show' article}}Show article{{/linkTo}} 
{{/each}} 

希望它能幫助。

+0

謝謝。如果您立即瀏覽路由articles/show/2,您會期望什麼行爲?那麼只會加載第2條(因此通過JSON請求調用articlkes/2)或將加載所有文章(因此調用JSON請求文章)。 – cyclomarc

+0

@Marc,我期望瀏覽時直接路由'articles/2'的行爲是所有文章都會被加載,然後文章/ 2應該從商店提供,但我不確定爲什麼會改爲來電,一個文章和一個額外的文章與ID 2 – intuitivepixel

+0

謝謝。我會做一些進一步的測試,並嘗試更詳細地記錄行爲。 – cyclomarc

相關問題