Сервер отправлял события в Ember JS

#javascript #ember.js #server-sent-events

#javascript #ember.js #отправленные сервером события

Вопрос:

У меня есть приложение, в котором при нажатии на ссылку браузеру необходимо что-то запустить на сервере, и клиент должен получить прогресс в этом. 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) Есть ли какой-нибудь хороший пример использования SSE с ember js?

Ответ №1:

Не передавайте код в шаблоне. Обрабатывайте любые действия, которые вам нравятся, в контроллерах и маршрутах вашего приложения. Для 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
    });
  }
});
  

Комментарии:

1. Я бы изменил этот ответ, упомянув цикл выполнения Ember , чтобы убедиться, что последующие изменения обновляются в представлении.