2017-12-17 3 views
0

アクションでモーダルを追加または編集するような変更を加えた後、モデルフックを再度リフレッシュまたはリロードする必要があります。私はこのような話題をたくさん見たことがありますが、私の場合は非難されているか動作していません。奇跡のデータを変更した後にEmberリフレッシュ/リロードモデル

これは「listing.js」と呼ばれる私のcomponent.jsファイルです:

import Component from '@ember/component'; 

export default Component.extend({ 
    actions: { 
     togglePower: function(a){ 
      console.log(a); 
      var data = new Array(); 
      data.push(a); 
      $.ajax({ 
       cache:false, 
       type: 'POST', 
       url: "/api/device", 
       data: JSON.stringify(data), 
       contentType: "application/json" 
       }) 

       this.get('users.single.households.single.rooms.single.devices.single').send('refresh'); 
     } 
     } 
}); 

ミラージュは、自分のデータを受信し、それに取り組むことが可能です。しかし、今は私のページをリロードして自分の変更を見る必要があります。だから私はリストに最後の行を追加しようとしました.jsは

this.get('users.single.households.single.rooms.single.devices.single').send('refresh'); 

ですが、これはうまくいきません。コンソールが思い付く:

TypeError: this.get(...) is undefined

これは私のルートです:

 model(){ 
...}, 
     actions: { 
      refresh: function() { 
       this.refresh(); 
       } 
      } 

>  } 

答えて

0

リフレッシュを呼び出すには、閉鎖アクションを使用する必要があります。コンポーネントファイルのajaxの後に行う必要があります。

this.get('on-refresh')(); 

'on-refresh'は、コンポーネントに渡される関数です。この場合は、リフレッシュアクションです。

{{listing on-refresh=(route-action "refresh")}} 

route-actionでは、コントローラを経由せずにテンプレートから直接ルートのアクションを呼び出すことができますこのアドオンhttps://github.com/DockYard/ember-route-action-helperから来ています。

ここで行ったことは、コンポーネントにリフレッシュ関数を渡してから、コンポーネントが必要なときにコンポーネントを呼び出すことでした。

+0

ありがとうございます。これは助けてくれるが完全には働かない。私はthis.get( 'on-refresh')();を入れます。私のajaxのlisting.jsと{{listing-on-refresh =(route-action "refresh")}}は、私のlisting.hbsの上部にあります。私のサイトは極端に遅くなり、ロードできません。しかしこののようなボタンは正常に動作します。トグルパワーアクションの後にこのアクションを呼び出すことはできますか?たぶん私のアヤックスの直後ですか? – panx36

+0

これにより、サイトの速度が遅くなることがあります。ロードに時間がかかる理由を確認してみてください。 また、ajaxの終了後に 'this.get( 'on-refresh')'を呼び出す必要があることを忘れてしまいました。 '$ .ajax()。then(()=> {this.get( 'on-refresh')()})' – dorindo

+0

私はそれをajaxのその部分に移動し、エラーを受け取りました:_this.get(。 ..)は関数ではありません – panx36

関連する問題