2015-10-29 68 views
1

我有一個從服務器獲取數據默認列表的頁面,此頁面還有一個搜索框,它在運行時更新查詢參數並將新的數據列表返回到同一頁面。這工作正常。如何強制從服務器重新加載?

然而,當我清除搜索(無論是通過一個動作,或按「後退」在瀏覽器中),我想從服務器的缺省數據新鮮,更換任何搜索結果。

我想我有這個方法,因爲清除查詢參數確實會導致findAll()再次向服務器請求數據,並且還會返回正確的數據,但商店會保留先前檢索到的所有記錄從搜索,所以現在用戶看到這兩個默認設置他們得到了來自搜索後面的記錄。

那麼,如何強制灰燼數據使用哪種從API回來並覆蓋不管它曾在商店嗎?

這裏是我的路線代碼。儘管有reload: truerefreshModel: true,似乎既不是實際發生的事情:

model: function(params) { 
    if (params.q) { 
    return this.store.find('project', params); 
    } else { 
    return this.store.findAll('project', {reload: true}); 
    } 
}, 
queryParams: { 
    q: { 
    refreshModel: true 
    } 
}, 

提前感謝!

更新: 我注意到生產環境沒有這個問題。而在開發或運行ember serve --environment=development當數據不被清除出去,如果我在findAll()之前使用this.store.unloadAll('project'),似乎將其清除出去,但後來給了我一個錯誤「在銷燬的對象調用集」。但如果我做ember serve --environment=production我沒有得到任何錯誤。我不知道爲什麼會出現這種情況,但這並不是我第一次在開發中遇到麻煩,只是發現生產運行良好。

回答

0

您可以使用store.unloadAll('project')方法燒製findAll之前,從商店清除所有記錄。

+0

謝謝你,你會這樣想,但我已經嘗試過了,如果我把這一行放入,那麼在導航回到這個路由時,它會給我一個錯誤:'處理路由時出錯:項目斷言失敗:在被銷燬的對象上調用集合 – redOctober13

+0

Is there我可以從模型鉤子中明確設置模型的方法?我不知道爲什麼那會比從findAll()返回承諾有所不同,但是我在這裏變得絕望。 – redOctober13

相關問題