Я создаю калькулятор на основе ползунка диапазона пользовательского интерфейса jQuery, и у меня есть работающая настройка. В моем приложении есть функция bindEvents, которая связывает ползунок с событием slide
:
// this is where I bind all slide events
bindEvents: function() {
// hold on to the value of this
var self = CloudCalc;
// bind the slider's slide event to a data event
self.sl.on('slide', this.setSliderOutputValue);
}
и вот обработчик, который верно выполняет мое событие:
setSliderOutputValue: function (event, ui) {
// hold on to the value of this
var self = CloudCalc;
// show the ui output value on slide event
self.output.html( ui.value + " INSTANCE");
}
Теперь я хочу вызвать несколько событий, когда пользователь перемещает слайдер. Поэтому я хотел бы использовать шаблон наблюдателя в этой настройке следующим образом (используя плагин addyosmani pubsub):
bindEvents: function() {
// hold on to the value of this
var self = CloudCalc;
// bind the slider's slide event and publish it
self.sl.on('slide', $.publish('slider/moved'));
}
Вот подписка:
subscriptions: function () {
$.subscribe('slider/moved', this.setSliderOutputValue);
}
Поэтому, когда эта подписка вызывает событие setSliderOutputValue
, я получаю сообщение об ошибке консоли:
Uncaught TypeError: Cannot read property 'value' of undefined
Это означает, что ссылка на свойство пользовательского интерфейса не передается событию setSliderOutputValue
.
Как передать свойство пользовательского интерфейса? Пожалуйста, поправьте меня, если я делаю это неправильно.