2012-02-26 42 views
0

我正在創建一個基於jQuery UI範圍滑塊的計算器,並具有可用的設置。我在我的應用程序中的bindEvents功能結合的滑塊slide事件:爲什麼我的jQuery UI範圍滑塊不響應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"); 
} 

現在我想觸發多個事件當用戶滑動滑塊時。所以我想用觀察者模式在此設置像這樣(使用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範圍滑塊來偵聽基於單個事件的多個事件並觸發

歡迎任何通過將多個訂閱電話重構爲單個電話來改進此代碼的建議。