このアプリケーションをフィルタリングできるリストが含まれているページがあります。クエリパラメータの削除と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にとってかなり新しいので、バグレポートを提出する前にここで助けを求めると思っていました。
私には何かがありますか?またはこれは設計/何らかの設計上の制限ですか?
ありがとうございます!
代わりに削除するだけで、デフォルト値の空の '' ''に設定されます。これは、私がqueryParamsのためにやっている方法を再読み込みします。 – kumkanillam
ああ、これまでにやったことですが、パラメータが削除されず、 'refreshModel'がリフレッシュを起動しますが、それはあまり最適ではありません。 (醜いURLを除いて)現時点では大きな問題ではありませんが、空の文字列は実際には未定義/空文字列と同じではなく、特定のフィールドで問題になることがあります。例えばVAT番号の場合、 'filter [vat] ='はVAT番号のない領収書だけをフィルタリングしますが、フィルタリングを完全に無効にしたいと考えています。 – blue
@blueこの問題:https://github.com/emberjs/ember.js/issues/10577が役に立ちますか?クエリパラメータは本当に面倒です。これがバグかどうか分かりません。回避策として、あなたのコントローラからアクションを送信して、あなたのルートでリフレッシュをトリガすることができます:http://emberjs.com/api/classes/Ember.Route.html#method_refresh –