2016-04-03 14 views
1

Ember.jsを初めて使用していて、簡単な作業に苦労しています。私の目標は、アクションがトリガーされた後にページコンテンツのライブアップデートを達成することです。私は、このケースでは、ルートコントローラモデルの関係に関して、Emberのロジックではかなり失われています。Emberモデルをライブ経由で更新

ようなので、私のtemplate.hbsは何かである:私のコントローラは、ユーザーフォームからいくつかのparamsを受け入れ、AJAX呼び出しを行う

<h1>{{model.somedata}}</h1> 
<button {{action 'getContent'}}>Get Content</button> 

export default Ember.Controller.extend({ 
    somedata: 'hello', 
    actions: { 
     getContent: function() { 
      var self = this; 

      Ember.$.ajax({ 

       // ... standart call with some query data 

       success: function(result) { 
        self.set('somedata', result); 
       } 
      }); 
     } 
    } 
}); 

マイルートモデルのみ、コントローラのparamsを返しますので、私ならばコントローラーのプロパティーが更新されるとすぐにそれを入手してください。現在のモデルを更新し、テンプレートへのすべての変更を表示する簡単なステップが必要です。

export default Ember.Route.extend({ 
    model: function(params) { 
     return params; 
    } 
}); 

このプロセスがEmberで定期的にどのように構築されているかを教えていただけますか?

+0

「this.controller.set( 'somedata'、result)」を探していますか? –

+0

ええ、これはそうですが、この場合モデルは更新されません – markoffden

+0

"this.currentModel.set( 'somedata'、result)"を試してください –

答えて

1

あなたはself.set('model.somedata', results)を探しています。

あなたのコードはコントローラにsomedataプロパティを設定していますが、何も影響しません。

+0

ありがとう、これを試してみる) – markoffden

+0

しかし、モデルは活発に更新されますか? – markoffden

+0

@markoffdenそれはEmberの人生の全目的です。 –

1

うん、それは少し混乱だが、ここで

まずエンバーは、ルートを設定し...私はそれを考える方法です。

ルートには、モデルを取得および処理するために使用される複数のフック(beforeModel、model、afterModel)があります。 Emberは常にこれを尊重した自然の一部として探します。

また、すべてのモデルフックの後に起動するsetupControllerフックもあります。 setupControllerフックの一部として、コントローラが作成され、モデルがコントローラに渡されます。

これが起こったら、モデルはルートの一部ではなくコントローラではなくてもいいと思っています。

+0

ありがとう、私はこれを考慮しようとすると、あなたはそれを私にもう少し明確にしました – markoffden

+0

それはすべてのモデルのフックの後、およびコントローラの後に起動する 'setupController'フックもあります創造された。通常(これはデフォルトの動作です)、このフックはコントローラの 'model'プロパティにモデルの解決された値を設定します*。 –

0

コントローラは廃止予定です。したがって、IMO はコントローラを使用しないでください。

あなたのルートでその行動を処理します。モデルフックによって返されたオブジェクトに値をバインドすると、値を更新するとデータとページが更新されます。

export default Ember.Route.extend({ 
    somedata: null, 
    model: function(params) { 
     return { 
      params: params, 
      somedata: this.get('somedata') 
     }; 
    }, 
    actions: { 
     getContent: function() { 
      ... 
      var _this = this; 
      ... 
      success: function(result) { 
       _this.set('somedata', result); 
      } 
     } 
    } 
}); 
+1

あなたの提案に感謝します))) – markoffden

関連する問題