2012-02-26 1 views
0

Я создаю калькулятор на основе ползунка диапазона jQuery UI и выполняю настройку. У меня есть функция bindEvents в моем приложении, которое связывает ползунок slide события:Почему мой слайдер диапазона jQuery не отвечает на события pubsub?

// 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"); 
} 

Теперь я хочу, чтобы вызвать несколько событий когда пользователь скользит по ползунку. Поэтому я хотел бы использовать шаблон наблюдателя в этой установке, как так (с помощью PubSub плагин addyosmani): стандарт

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 

Это означает, что ссылку на Ui собственность не получает передается setSliderOutputValue события.

Как передать свойство ui? Пожалуйста, поправьте меня, если я сделаю это неправильно.

ответ

0

Итак, вот что я получил с рисунком pubsub. Я добавил $.publish вызов метод 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"); 
     $.publish('slider/moved') 
}, 

А потом добавил к моим подпискам следующим образом:

subscriptions: function() { 
     $.subscribe('plan/results', this.parseJSON);  
     $.subscribe('slider/moved', this.setVMval); 
     $.subscribe('slider/moved', this.setRAMval); 
     $.subscribe('slider/moved', this.setHDval);   
}, 

И вуаля! Теперь я могу слушать и запускать несколько событий на основе одного события с помощью слайдера диапазона jQuery.

Любые предложения по улучшению этого кода путем рефакторинга нескольких вызовов подписки на один звонок приветствуются.