2016-10-12 15 views
1

私は私のテンプレートに2つのコンポーネントがあります:私は、パラメータとしてfilterByDateのルート遷移をトリガコントローラ、にページング・フィルタ・リストコンポーネントからアクションを送信emberjsコンポーネントのプロパティが更新されていませんか?

{{ property-pie-chart 
    models=model.hosts 
    defaultProp="" 
    filterByDate=filterByDate 
    chartData=[]  
}} 

{{ paged-filtered-list 
    data=model.hosts 
    dates=model.dates 
    page=page 
    pageSize=pageSize 
    filterByDate=filterByDate 
    pagerView=pagerView 
    initRouteAction=(action 'dateInit') 
    dateFilterAction=(action 'filterByDate') 
    termFilterAction=(action 'filterByTerm')  
    sortOrder=sortOrder 
    sortField=sortField 
}} 

を:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams: [ 
     'page', 
     'pageSize', 
     'sortField', 
     'sortOrder', 
     'filterByDate', 
     'filterByTerm' 
    ], 
    filterByDate: "", 
    filterByTerm: "", 
    page: 1, 
    pageSize: 10, 
    pagerView: 4, 
    sortField: "", 
    sortOrder: 'asc', 
    lala: "", 
    actions: { 
     dateInit: function(sortedDates) { 
      if (!this.get('filterByDate')) { 
       let params = { 
        filterByDate: sortedDates.get('firstObject').get('key'), 
        page: this.get('page'), 
        pageSize: this.get('pageSize'), 
        pagerView: this.get('pagerView') 
       }; 

       this.transitionToRoute('hosts', { queryParams: params}); 
      } 
     }, 
     filterByDate: function(value) { 
      if (value) { 
       let params = { 
        filterByDate: value, 
        page: 1, 
        pageSize: this.get('pageSize') 
       }; 

       this.transitionToRoute('hosts', { queryParams: params}); 
      } 
     }, 

     filterByTerm: function(value) { 
      let params = { 
       filterByDate: this.get('filterByDate'), 
       page: 1, 
       pageSize: this.get('pageSize') 
      }; 

      if (value) { 
       params['filterByTerm'] = value; 
      } else { 
       params['filterByTerm'] = ""; 
      } 

      this.transitionToRoute('hosts', { queryParams: params}); 
     } 
    } 
}); 

問題はそのURLですfilterByDateプロパティが変更されましたが、init/didUpdateメソッドの属性をチェックしてパラメータが変更されていますが、誰かが助けて間違っていることを説明できますか?

答えて

0

現在コントローラにはfilterByDateプロパティが設定されていません。

私は

queryParams: { page: { refreshModel: true }, pageSize: { refreshModel: true },sortOrder: { refreshModel: true },filterByDate: { refreshModel: true },filterByTerm: { refreshModel: true }} 

refreshModelを表し、あなたがroute.jsの対応で、以下のプロパティを宣言してください 、次のアプローチをお勧めしますが、このプロパティを変更するたびに、それはページを更新するために強制されますです。

およびcontroller.jsでは、必要なqueryParams参加プロパティを設定するだけで、this.transitionToRoute('hosts', { queryParams: params});を呼び出す必要はありません。自動的に移行が行われます。

ミニノート:あなたは、これが問題に関連していない方法で、関数名filterByTermfilterByDateを変更することができればそれは良いことだ

更新: 私はあなたが問題を整理嬉しいです。しかし、私はemberガイドからComputed Propertiesが何であるかを強調したいと思います。

簡単に言えば、計算されたプロパティでは、関数をプロパティとして宣言できます。計算されたプロパティを関数として定義することで作成します。を入力すると、Emberが自動的に呼び出します。通常の静的なプロパティと同じ方法で使用できます。

https://guides.emberjs.com/v2.8.0/object-model/computed-properties/#toc_what-are-computed-properties

+0

私はすでにfilterByDateにrefreshModelをやっているし、私もちょうどtransitionToRoute、同じ問題なくプロパティを設定しようとしました。 didUpdateAttrメソッドのconsole.log filterByDate属性のときに新しい値が表示されますが、filterByDateに依存するEmber.computedメソッドを作成しても何も起こりません。値は更新されたようですが、コンポーネントは変更を検出しませんでした。 – anjalis

+1

コンポーネントに計算されたプロパティコードを表示しますか?あなたがそれを要求しているときに計算されたプロパティが呼び出されることを覚えておいてください。 – kumkanillam

+0

ok :)、ありがとう、私はそれが私は計算されたプロパティをどこでも使用していないと思う... – anjalis

関連する問題