2016-09-16 31 views
1

所以我有這個應用程序與一個頁面,其中包含一個可以過濾的列表。查詢參數刪除和refreshModel

列表背後的數據可能非常大,因此通過發送與JSONAPI參考(例如?filter[name]=John&filter[date]=2016-09-12|2016-09-15)中的參數非常相似的過濾器參數在服務器端完成過濾。

爲了做到這一點,我已經建立了我的路線如下:

export default Ember.Route.extend(AuthenticatedRoute, { 
    queryParams: { 
    'filter[name]': { 
     refreshModel: true 
    }, 
    [...] 
    }, 

    model(params) { 
    return this.store.query('receipt', params); 
    } 
}); 

這使得路線的查詢參數複製到API調用沒有任何問題。

現在,當然,用戶必須能夠過濾器從他的界面更改,對不對?所以我做了一點點引導模式/形態,並在我的控制器的作用,它建立了一套查詢參數,並與他們重新加載路線迷上它:

changeFilters() { 
    var params = {}; 
    if (this.get('nameFilter')) { 
    params['filter[name]'] = this.get('nameFilter'); 
    } 
    [...] 
    this.transitionToRoute({queryParams: params}); 
} 

這樣做實際上沒有很好地工作。當在查詢中添加或更改filter[name]參數時,路由將刷新並更新模型。但是,用戶禁用過濾器時會出現問題:即使refreshModel設置爲true,移除查詢參數似乎也不會刷新路由。

所以,我非常確定這是一個錯誤,因爲它對我沒有任何意義,但是在此期間我對Ember很新,所以我想我會在提交錯誤報告之前尋求幫助。

那麼有什麼我失蹤?或者是這種設計/某種設計限制?

謝謝!

+1

只是想,而不是僅僅去除其設置爲默認值空'「」',將重新加載就是我怎麼做我queryParams。 – kumkanillam

+0

哦,是的,這就是我在此期間所做的,參數不會被刪除,'refreshModel'觸發刷新,但這不是最佳的。目前這不是什麼大問題(除了它生成的醜陋URL),但是空字符串與undefined/null字符串並不是一回事,我可以看到它在某些字段上成爲問題。例如,對於增值稅號碼,我想'過濾[增值稅] ='只過濾沒有(空白)增值稅號碼的收據,但我仍然希望能夠完全禁用過濾。 – blue

+1

@blue此問題:https://github.com/emberjs/ember.js/issues/10577可能有幫助嗎?查詢參數非常棘手;我不確定這是否是一個錯誤。作爲一種解決方法,您可以嘗試從您的控制器發送操作以觸發您的路由中的刷新操作:http://emberjs.com/api/classes/Ember.Route.html#method_refresh –

回答

1

如果有什麼,而不是使用transitionToRoute,您通過下列方式更新您的控制器上綁定的查詢參數?

的代碼是這樣:

export default Ember.Controller.extend({ 

    queryParams: { 
    'filter[name]': { 
     refreshModel: true 
    }, 
    }, 

}); 

changeFilters() { 
    var params = {}; 
    if (this.get('nameFilter')) { 
    this.set('filter[name]', this.get('nameFilter')); 
    } 
    [...] 
} 

我不知道這是否會工作,但你可以給它一個鏡頭。

+0

問題在於,更改控制器中的屬性不會更改URL,並且我希望我的客戶端能夠在彼此之間共享URL,包含過濾器。也許某種混合可以工作,但即使如此,我不認爲在控制器中設置「filter [name]」屬性會自動將其設置在路由中。 – blue

+0

@blue指南說,更改控制器中的屬性將更新URL:https://guides.emberjs.com/v2.8.0/routing/query-params/#toc_specifying-query-parameters - 「...對URL中的類別查詢參數所做的任何更改都會更新控制器上的類別屬性:文章,反之亦然。「 –

+0

噢,好吧,那很完美!非常感謝! – blue