2017-04-08 51 views
0

我想單擊「導出」按鈕,並將「導出」查詢參數設置爲true,將其轉移到路由「主目錄」。我不希望這個查詢參數刷新我的路線。因此,這裏是我的路由是怎麼樣子:URL中未顯示更改查詢參數

export default Route.extend(ApplicationRouteMixin, { 
    queryParams: { 
    export: { 
     refreshModel: false 
    } 
    } 
}) 

在我的控制,我試圖觀察查詢參數並調用一個函數,它不出口了我之後,我想設置的查詢參數回到null。這裏是我的控制器:

import Ember from 'ember' 
const {Controller, inject} = Ember 

export default Controller.extend({ 
    // == Dependencies ========================================================== 
    session: inject.service(), 
    // == Keyword Properties ==================================================== 
    queryParams: ['export'], 
    export: null, 

    queryParamsObserver: function() { 
    if (this.get('export')) { 
     this.exportFile() 
     this.set('export', null) 
    } 
    }.observes('export'), 

    // == Functions ============================================================= 
    exportFile() { 
    }, 

    // == Actions =============================================================== 
    actions: { 
    } 

}) 

但我的問題是,當我設置的查詢參數爲空,也不會在URL上改變。我想知道我在這裏錯過了什麼,不會導致這種行爲。 另外,我不知道如果使用觀察查詢參數是觸發某些操作的最佳解決方案。

+0

所以基本上你想'出口'始終爲空,並只是用它來鏈接觸發導出? – Lux

+0

好吧不總是空,我希望它被設置爲null當我最初轉移到該路線能夠下載文件。然後在下載後立即將其設置爲空。這個導出按鈕在應用程序級別,可以從所有路線訪問。所以用戶將能夠通過點擊導出按鈕再次將導出查詢參數設置爲真。 – user5471528

回答

1

與您的情況有關的問題與您在控制器中設置export太早以至於查詢參數更改未反映到url中有關。瞭解Ember.run循環並不是微不足道的。您應該通過閱讀following開始瞭解運行循環。

看看下面twiddle,如果您在Ember.run.scheduleOnce包裹的export設定爲在玩弄然後你會看到export在URL中清除。 (事實上​​,它立即被刪除,你永遠不會看到它變成真實的;如果你包裝導出功能和在承諾中清除export標誌;假設這將在幾秒鐘後解決;然後你會看到它將變成true然後將被刪除)。

關於你使用觀察者的問題;我看不到你現在的設計可以做什麼。原因是這樣的;你說refreshModel是錯誤的;因此,如果您已經在相同的路線中,則在路徑中沒有可用的任何掛接方法來觸發控制器內的export功能。你需要改變你的設計;什麼ykaragol建議可能是一個很好的起點。

1

第一個選項,使用service並觸發通過應用程序路徑或通過按鈕組件導出似乎更適合您的情況。您可以在所有路線中使用它。用戶在導出時保持相同的路線。我會使用這個選項。

第二種選擇是將exportFile轉換爲thennable函數。導出完成後,您可以清除queryParams。這裏是a working twiddle給你。