2016-07-12 27 views
0

我希望我的模型在queryParams發生更改時重新加載。 queryParams更改反映在URL中,但模型重新加載沒有發生。我跟隨ember.js指南(https://guides.emberjs.com/v2.6.0/routing/query-params/)進行全面過渡。我在我的控制器宣佈我queryParams即使在queryParams發生變化後,也不重裝ember數據模型

//controllers/service/service.js 
    import Ember from 'ember'; 
    export default Ember.Controller.extend({ 
     queryParams:['showFriends'] 
    }); 

    //routes/service/service.js 
    model(params){ 
     return this.store.query('service', params); 
    }, 
    actions:{ 
     updatePage(params){ 
     this.transitionTo('service',{queryParams:{showFriends:params}}); 
    }, 
    }, 
    queryParams:{ 
    showFriends:{ 
     refreshModel:true 
    } 
    }, 

我從中通過組件調用updatePage基於一個複選框選擇PARAMS爲真或假。該組件是從application.hbs文件名爲如下

{{test-component model=model updatePage="updatePage"}} 

如果我刪除refreshModel:從我的路線真的,我看到的網址正在更新,但我的模型不重裝(根據文檔的預期)。

,因爲我正在做一個全面過渡我增加了行refreshModel:這給了我錯誤

ember.debug.js:32096 TypeError: this.refresh is not a function 
at Class.queryParamsDidChange (ember.debug.js:26286) 
at Object.triggerEvent (ember.debug.js:28580) 
at Object.trigger (ember.debug.js:53473) 
at fireQueryParamDidChange (ember.debug.js:52255) 
at Object.queryParamsTransition (ember.debug.js:51983) 
at Object.getTransitionByIntent (ember.debug.js:51913) 
at Object.transitionByIntent (ember.debug.js:52018) 
at doTransition (ember.debug.js:52590) 
at Object.transitionTo (ember.debug.js:52087) 
at Class._doTransition (ember.debug.js:28291) 

我花了超過2天在這個問題上,但沒有使用正確的。任何遇到過類似問題或對如何解決這個問題有任何想法的人都會對我有很大的幫助。在此先感謝

+0

你可以嘗試this.transitionTo('service.service',{queryParams:{showFriends:params}}); ..向我顯示你的路由器代碼,它將有助於調試 – kumkanillam

回答

1

queryParams:{ showFriends:{ refreshModel:true } }在相應的路線。

路線是負責提取的機型,所以它應該是有

+0

嘿@Ebrahim,我覺得路由器和queryParams代碼在上面的例子中的服務路由器中,它在相應的路由中。你能讓我知道我做錯了什麼。 –

+0

@ nag9329是的,我看到你放在那裏。但例外情況很明顯。它想要在路由上調用refresh,但找不到它。所以你會介意提供一個旋轉? –

+0

我在https://ember-twiddle.com/c0b5c3cd910e22a75551bb7b451c3603上提供了一個小玩意。請檢查出 –

1

回答我的問題,想如果有人面臨同樣的問題。解決方案很簡單,但你知道找到合適的位置是一項艱鉅的任務。

我有一個服務注入我的所有路線和服務的名稱是「刷新」。當我在路由中調用refreshModel:true時,因爲我們都知道在後端調用this.refresh()方法。

但是,在我的情況下,具有刷新名稱的服務已經被注入到應用程序中,因此ember不會調用該路由的this.refresh()方法,而是調用注入的服務,這顯然不是一種方法。

所以,這是拋出一個錯誤this.refresh不是一個函數。 Ember將會更加明確地給出錯誤,但是對於任何人來說,難以期待這種情況。無論如何,感謝所有給我的解決方案,讓我走上了正確的道路。

相關問題