我如何从 EmberJS 模板轮询我的 Python Flask 服务器?

How can I poll my Python Flask server from an EmberJS template?

我有一个 Flask Python 服务器,它使用 CeleryOnce worker 根据用户的查询收集和格式化一些数据。我有一个使用 EmberJS CLI 2.5 创建的页面,它需要将该查询发送到我的 Flask 服务器并轮询我的服务器以检索 CeleryOnce worker 的当前状态。我的主要观点是,我使用的是 EmberJS CLI 默认生成的文件,但我没有使用默认的 Ember CLI 数据源。

有人可以指出我如何使用从 ajax 查询中提取的数据更新我的 ember js 页面的正确方向吗?或者让我的控制器轮询数据并将其传递到组件而不刷新页面?看起来 Ember-Data 假设服务器和页面在同一个 port/URL/machine 上,但我的情况并非如此。 (或者应该是?)

我在我的 EmberJs 项目中设置了所有的构建块,并且我的 Flask 项目中的所有数据都可以用作 JSON,但我就是做不到似乎将两者联系在一起。

遗憾的是,我的 google 搜索结果都是旧版本的 EmberJS,它似乎不再适用于当前版本。


虽然我接受了答案,但我不得不进行修改以正确设置 var:

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

Can somebody point me in the right direction of how I can periodically make calls to my python server from my ember js page to pull the data like an ajax query?

值得一提的是,轮询是网络/数据/模型层的关注点——轮询的方式不应与模板或页面上的数据显示方式挂钩。

Ember 提供了一些有助于轮询的内置 API。除此之外,在 Ember 中轮询服务器与在任何其他 Javascript 应用程序中没有什么不同。任何一种轮询解决方案最终都将涉及在不同时间根据某种时间表发出 AJAX 请求。

我建议也从 Ember.run.later. If you're feeling more ambitious, you could check out the 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 中的轮询,可能无需指定您在后端使用的服务器类型。