2017-11-24 2 views
0

のフィルタがあります。初期値は初期化されていますが、決して更新されません。 editstateはサービスです。この場合は、公開された変数のみを提供します。つまり、editstate.filterValueとeditstate.filterFieldが変更されると、フィルタが更新されるはずです。computed.filter()を更新するように強制しますか?

しかし、そうではありません。

私はそれらもローカルの計算値にしようとしましたが、サイコロはありませんでした。これまでに動作する唯一のプログラム的なことは、ハンドルバー{{#ifトグル(toggle)}を使用してコンポーネント全体のアンレンダリングと再レンダリングを行うことです。

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 
    editstate: Ember.inject.service('edit-state'), 
    filteredList: Ember.computed.filter('model', function(current, index, all) { 
      return current.get(Ember.get(this.get('editstate'), 'filterField')) == Ember.get(this.get('editstate'), 'filterValue'); 
    }), 

私は何が欠けていますか?フィルタを再計算したり、明示的にこれらの値を見るよう指示するAPIはありません。

更新:私は私の目標を達成するひどいハック方法が見つかりました:私のサービスでは、私はを作成するが、私は、ちょうど更新を強制的にフィルタリングしていたモデルのレコードを保存しないでください。フィルタのパラメータが変わるたびに、そのレコードを現在の時間(ミリ秒)で更新します。もちろん、それは常にフィルターによって除外されます。

これは醜いです、それはおそらく邪悪です...もっと良い方法がありますか?

答えて

0

計算された定義で(あなたが計算された関数の中で使用することを)すべての変数を定義します。「コールバック呼び出しは関数ではありませんことを

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 
    editstate: Ember.inject.service('edit-state'), 
    filteredList: Ember.computed('model', 'editstate.filterField', 'editstate.filterValue', function() { 
    let filterField = Ember.get(this, 'editstate.filterField'); 
    let filterValue = Ember.get(this, 'editstate.filterValue'); 
    return this.get('model').filterBy(filterField, filterValue); 
    }), 
    ... 
+1

私は取得しています:

export default Ember.Component.extend({ store: Ember.inject.service(), editstate: Ember.inject.service('edit-state'), filteredList: Ember.computed('model', 'editstate.filterField', 'editstate.filterValue', function() { return this.get('model').filter((current) => { return current.get(Ember.get(this.get('editstate'), 'filterField')) === Ember.get(this.get('editstate'), 'filterValue'); } }), ... 

またはそれ以上読み"; [Ember source from filter](https://github.com/emberjs/ember.js/blob/v2.15.3/packages/ember-runtime/lib/computed/reduce_computed_macros.js#L309)のフィルタのみを表示します(1つのdependentKey値)(https://github.com/emberjs/ember.js/blob/v2.15.3/packages/ember-runtime/lib/computed/reduce_computed_macros.js#)のみを処理する1つのキー(array_macro)を受け取りますL34)。 別の機能を使用すべきですか?それらの変数を追加する他の方法? – TCat

+0

これは私の間違いです、コード編集 – ykaragol

+0

また、 'model'の更新を扱うためには、計算された定義で' model'の代わりに 'model. []'を使うことを検討してください。 [computed-properties-and-aggregate-data]を参照してください(https://guides.emberjs.com/v2.16.0/object-model/computed-properties-and-aggregate-data/#toc_code-code-vs-code-各コード) – ykaragol

関連する問題