Ответ 1
Итак, теперь к большому вопросу: есть ли лучший способ доступа к маршрутизатору или контроллеру со стороны Ember? Предпочтительно отправлять событие либо с контекстом.
Да. Это звучит как хорошая подгонка для электронного инструментального модуля. Попросите соответствующего контроллера подписаться на события SignalR, а затем запускайте их, когда ваше приложение обрабатывает уведомление в реальном времени.
Сначала добавьте метод ApplicationController для обработки обновлений. Если здесь не определено, событие будет пузыриться на маршрутизаторе.
App.ApplicationController = Ember.Controller.extend({
count: 0,
name: 'default',
signalrNotificationOccured: function(context) {
this.incrementProperty('count');
this.set('name', context.name);
}
});
Затем настройте свой ApplicationController, подписавшись на событие signalr.notificationOccured
. Используйте перед обратным вызовом для регистрации события и отправки его полезной нагрузки в контроллер.
App.ApplicationRoute = Ember.Route.extend({
setupController: function (controller, model) {
Ember.Instrumentation.subscribe("signalr.notificationOccured", {
before: function(name, timestamp, payload) {
console.log('Recieved ', name, ' at ' + timestamp + ' with payload: ', payload);
controller.send('signalrNotificationOccured', payload);
},
after: function() {}
});
}
});
Затем из приложения SignalR используйте Ember.Instrumentation.instrument
для отправки полезной нагрузки в ApplicationController следующим образом:
notificator.update = function (context) {
Ember.Instrumentation.instrument("signalr.notificationOccured", context);
});
Я разместил рабочую копию с симулированными уведомлениями SignalR здесь: http://jsbin.com/iyexuf/1/edit
Документы на инструментальном модуле можно найти здесь а также проверить спецификации для получения дополнительных примеров.