Ember JS 中的服务器推送事件

3

我有一个应用程序,其中点击链接后,浏览器需要在服务器上触发某些操作,并且客户端应该能够获取其进度。SSE是这方面的好选择,但我无法在正在学习的Ember中弄清楚这一点。

我尝试使用模板execute

<script type="text/x-handlebars" data-template-name="execute">
    <script>
       if(typeof(EventSource)!=="undefined") {
          var source=new EventSource("/execute/flow");
          source.onmessage=function(event) {
              if(event.data == 'end') {
                source.close();
              }else{
                document.getElementById("flow_result").innerHTML+= event.data + "<br>";
              }
          };
       } else {
          document.getElementById("flow_result").innerHTML="Sorry, your browser does not support server-sent events...";
       }
    }
    <script>
<script>

在页面的某个位置有一个使用{{#link-to 'execute'}}的链接,触发这个模板。但是,一些SSE的JavaScript代码似乎根本没有执行。
问题:
1)我做错了什么?(我怀疑我不应该把JavaScript代码放在模板中) 2)有没有使用Ember JS的SSE的好例子?
1个回答

5
不要在模板中传递代码。在应用程序的控制器和路由中处理您喜欢的任何操作。对于 SSE,您可以执行以下操作:
App.ApplicationController = Ember.Controller.extend({
  init: function() {
    var eventSource;
    eventSource = new EventSource(your-event-source);
    return eventSource.addEventListener(your-event-to-listen, function(e) {
      var data;
      return data = $.parseJSON(e.data);
      //Do whatever else you want in here with your data
    });
  }
});

我想在这个答案中补充一下 Ember run loop,以确保视图中更新后续更改。 - Floby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接