2017-04-08 14 views
0

"エクスポート"ボタンをクリックし、 "エクスポート"クエリパラメータをtrueに設定して "ホーム"ルートに移動します。私はこのクエリのparamが私のルートを更新しないようにしたい。だからここに私のルートがどのように見えるかされていますURLにクエリパラメータが変更されていません

私のコントローラで
export default Route.extend(ApplicationRouteMixin, { 
    queryParams: { 
    export: { 
     refreshModel: false 
    } 
    } 
}) 

、私は、クエリのparamを観察し、私のために輸出を行う関数を呼び出すしようとしている、その後、私は、クエリのparamを設定したいですヌルに戻るここに私のコントローラである:

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: { 
    } 

}) 

しかし、私の問題は、私がnullにクエリのparamを設定すると、それはURLに変更されないことです。私は、その行為を引き起こしていない、私がここで何が欠けているのだろうと思っています。 さらに、クエリのparamを監視することが、いくつかのアクションを引き起こす最適な解決策であるかどうかは疑問です。

+0

基本的には、 'export'を常にnullにして、エクスポートにトリガーするためにリンクを使用しますか? – Lux

+0

よくないとは限りません。最初にそのルートに移動してファイルをダウンロードできるときにnullに設定します。ダウンロード直後にnullに設定します。このエクスポートボタンは、アプリケーションレベルにあり、すべてのルートからアクセスできます。ユーザーは、エクスポートボタンをクリックすることで、エクスポートクエリのparamを再度trueに設定することができます。 – user5471528

答えて

1

あなたのケースの問題は、コントローラー内のexportの設定が早すぎて、照会パラメーターの変更がURLに反映されないという事実に関連しています。 Ember.runループについて学ぶことは自明ではありません。実行ループについて学習するには、followingを読んでください。

twiddleを見てみましょう、あなたは回転因子のようEmber.run.scheduleOnceexportの設定をラップするならば、あなたはexportがURLにクリアされて表示されます。実際にはすぐに削除され、それが真実になることは決してありません;約束の範囲内で輸出関数とexportフラグのクリアを実行した場合、それは数秒後に解決されるとしたら、trueになります。除去される)。

オブザーバーの使用に関するご質問については、私はあなたの現在のデザインで何ができるのか分かりません。その理由は、あなたはrefreshModelが偽であると言っています。したがって、既に同じルート内にいる場合は、exportがコントローラ内で機能するためのルートでフック方法を使用することはできません。デザインを変更する必要があります。 ykaragolが提案したものが良い出発点になるかもしれません。

1

最初のオプションは、serviceを使用し、アプリケーションルート経由またはボタンコンポーネント経由でのエクスポートをトリガーすることが、あなたの状況により適しているようです。すべてのルートから使用できます。ユーザーは、エクスポート中に同じルートに留まります。私はこのオプションを使用します。

第2のオプションは、exportFilethennable関数に変換することです。エクスポートが完了したら、queryParamsをクリアすることができます。ここにはa working twiddleがあります。

関連する問題