#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 , чтобы убедиться, что последующие изменения обновляются в представлении.