2016-05-19 5 views
0

私はCeleryOnceワーカーを使用してFlask Python Serverを使用して、ユーザーからのクエリに基づいていくつかのデータを収集し、フォーマットします。私はEmberJS CLI 2.5で作成したページを持っています。このページはFlaskサーバーにそのクエリを送信するだけでなく、サーバーをポーリングしてCeleryOnceワーカーの現在のステータスを取得する必要があります。私の主なポイントは、EmberJS CLIからデフォルトの生成ファイルを使用していますが、デフォルトのEmber CLIデータソースを使用していないことです。EmberJSテンプレートからPython Flaskサーバーをポーリングするにはどうすればよいですか?

誰かが私のember jsページをajaxクエリから取得したデータで更新する方法の正しい方向を教えてくれますか?あるいは、コントローラがデータをポーリングして、ページを更新せずにコンポーネントに渡すようにしてもよいでしょうか? Ember-Dataはサーバーとページが同じポート/ URL /マシンにあると想定しているようですが、私の状況ではそうではありません。

EmberJsプロジェクトにすべてのビルディングブロックが設定されており、FlaskプロジェクトですべてのデータをJSONとして処理できますが、接続できないようです一緒に2人。

悲しいことに、私のGoogle検索では、EmberJSの古いバージョンが、現在のバージョンでは動作しなくなったようです。


私は答えを受け入れたが、私はきちんとVARを設定するための修正をしなければならなかった:

request() { 
var comp = this; 
Ember.$.getJSON('http://localhost:5000/api/v1.0/', 'GET').then(function(tasks)  { 
    comp.set('tasks',tasks); 
}); 

答えて

3

誰かが私が電話を定期的に 作ることができる方法の正しい方向に私を指すことができます私のember jsページから私のpythonサーバーにデータを引き出すために のようなajaxクエリですか?

ポーリングはネットワーク/データ/モデルレイヤの懸念事項です。ポーリングをテンプレートに結合しないでください。また、ページにデータを表示する方法もあります。

Emberには、ポーリングに役立つ組み込みのAPIがいくつか用意されています。それとは別に、Emberでサーバーをポーリングすることは、他のJavascriptアプリケーションと違いはありません。どんな種類のポーリング・ソリューションでも、最終的にAJAXリクエストを何らかの種類のスケジュールで異なる時間に作成することになります。

Ember.run.laterで始まることをおすすめします。あなたがより野心的であると感じたら、Ember Concurrencyアドオンもチェックできます。

import Ember from 'ember'; 

export default Ember.Component.extend({ // Or Ember.Controller.extend({ ... 

    setupPolling: Ember.on('init', function() { 
    this.pollRequest(); 
    }), 

    pollRequest() { 
    this.request(); 
    Ember.run.later(this, this.pollRequest, 100); 
    }, 

    request() { 
    // Do your AJAX/Ember Data call here. Set the results of the call on your Component so you can render it in your template. The template will update automatically when the data changes. 
    }, 

}); 

あなたはあなたの答えに埋め込まれたいくつかの異なる質問がある(例えば、CORS程度):

最も簡単な解決策は、おそらく次のようになります。これらを別々の質問に分解してみてください。それは、他のSOユーザーが応答するのがずっと簡単になり、より良い回答率も得られます。また、あなたの質問を過度に特定しないようにしてください。 Emberのポーリングについて知りたい場合は、おそらくバックエンドで使用しているサーバの種類を指定する必要はありません。

+0

ありがとうございました。私の主な質問は、あなたがちょうどコメントを書いた部分に関してです:私は。コンポーネントへの呼び出し結果を設定するにはどうすればよいですか?私はそれを反映するために質問を編集しようとします。ポーリング情報も役に立ちました! – Bob

+0

@Bobあなたのコンポーネント/コントローラの結果を 'this.set( 'key'、value)'で設定します。次に、あなたのテンプレートで、その値をコンポーネントに渡します: '{{your-component attrKey = key}}'、そしてあなたのコンポーネントの 'attrKey'の値は' value'になります。 –

+0

これは標準的なものなので、Ember Guidesに相談するほうがよいでしょう。https://guides.emberjs.com/v2.5.0/components/passing-properties-to-a-component/ –

関連する問題