2016-05-03 43 views
1

我與here有同樣的問題,但不明白它是如何適用於我的情況,因爲我沒有「顯示」路線。Ember js如何強制重新加載特定選定的記錄?

我繼承了這個應用程序,以及router.js看起來是這樣的:

App.Router.map(function() { 
    this.route('index', { 
    path: '/' 
    }); 
    return this.resource('parent', { 
    path: '/:parent_id' 
    }, function() { 
    this.resource('games', { 
     path: '/games' 
    }); 
    return this.resource('game', { 
     path: '/game/:game_id' 
    }); 
    }); 
}); 

後端是Rails的,而當/遊戲網址在灰燼被擊中,它調用了Rails遊戲索引操作GamesController,如預期的那樣。

的遊戲模板渲染每場比賽:

<ul class="gamesList"> 
{{#each game in sortedGames}} 
    {{#link-to 'game' game class='gameItem u-cf' tagName='li'}} 
    <div class="gameItem-name u-before6of12 u-after1of12">{{game.name}}</div> 
    <div class="gameItem-description u-before6of12 u-after1of12">{{game.description}}</div> 
    {{/link-to}} 
{{/each}} 

但點擊遊戲鏈接時,它加載從灰燼存儲遊戲,並沒有使該API的請求。

我需要它向API發出請求,因爲: 1.遊戲列表僅包含名稱和說明,因爲列表可能包含許多遊戲,所以我們只想爲每個遊戲加載一個數據子集遊戲。 2.由Rails Show操作加載的單個遊戲應該使用不同的序列化程序來加載單個遊戲的所有附加內容(包括嵌入的子對象)。

這是遊戲路線:

App.GamesRoute = Ember.Route.extend(Easypeasy.ResetScroll, { 
    model: -> 
    return this.store.find('game', { 
     parent: @modelFor('parent').get('slug') 
    }) 
}) 

,這是遊戲路線:

App.GameRoute = Ember.Route.extend(App.ResetScroll) 

如何觸發灰燼到用戶點擊加載單機遊戲?

回答

4

因此默認情況下,默認情況下的數據不會重新請求它已經加載的數據。如果您的父母路線的模型加載了一系列遊戲,那麼需要特定遊戲的子路線不會再發出另一個請求。下面的代碼

this.store.findRecord('game', params.game_id) 

會簡單地看在內存燼的數據存儲中,並返回遊戲記錄。

在你需要做其他請求的情況下,你可以通過選項進行強制行爲

this.store.findRecord('game', params.game_id, {reload: true}); 

你可以在這裏閱讀有關此行爲:http://emberjs.com/api/data/classes/DS.Store.html#method_findRecord

請注意,我鏈接到燼2.0文檔,但這也適用於燼數據1。如果您使用的餘燼數據< 2.0,您的通話可能會是這樣的

this.store.find('game', params.game_id, {options: reload}); 

另一種方式做,這是調用reload()對模型本身的實例。如果您知道服務器上的數據發生更改,並且您希望在發生某些操作後重新請求模型的數據,這也將非常有用。

最後,Ember Data 2.0提供了更多選項,您可以從商店快速加載數據,但也可以在後臺請求獲取更多信息。這可能是好還是壞,具體取決於您是希望用戶看到缺少的內容,還是希望他們等待。

+0

感謝您的快速回復,但是我覺得奇怪的是代碼中沒有地方是這行:this.store.findRecord('game',params.game_id)。如果它沒有執行findRecord,它是如何從商店加載它的?我試着把它添加到GameRoute(你可以在上面看到基本上是空的),但是這給出了一個錯誤(不能讀取屬性undefined) – rmcsharry

+0

對不起,它給出了這個錯誤:處理路由時出錯:game this.store.findRecord是不是一個函數 - 我想這是因爲我在燼1.12。所以我嘗試你的提議的線爲燼<2.0並得到這個錯誤:處理路線時出錯:遊戲參數沒有定義 – rmcsharry

+0

好吧我修正了錯誤,通過添加參數函數參數,現在我得到另一個錯誤:遊戲重載未定義 – rmcsharry