不会调度chrome事件

时间:2014-08-05 23:39:31

标签: javascript google-chrome events javascript-events event-dispatching

我有一点问题。我以为我已经理解了事件处理,但现在我再也不这么认为了。

我创建了一个chrome事件():

this.onReadLine = new chrome.Event();

此事件在函数中分派:

this.onReadLine.dispatch(line);

在发送指令之前,我试图记录' line',发送指令的参数。没问题,' line'存在。

直接使用您将找到此部分的代码:

connection.onReadLine.addListener(function(line) {                  
    logJSON(line);                                                  
}); 

这是每次“onReadLine”时必须触发的内容。事件已发送。

问题在于事件' onReadLine'仅当我按下或释放按钮时才会发送'#dimmer1_Chrome_Input'在我的代码末尾定义。 我哪里错了?

感谢您的帮助。

我的完整代码在这里。与问题相关的部分用//// \ /// \ / \ /// \\ lines。

突出显示
// Serial used from Arduino board
const Arduino_COM = 'COM3'; // PC

var SerialConnection = function() {                                 
  this.connectionId = -1;                                           
  this.lineBuffer = "";
  this.boundOnDataReceiving = this.onDataReceiving.bind(this);                  
  this.boundOnDataReceivingError = this.onDataReceivingError.bind(this);
  this.onConnect = new chrome.Event();

///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

  this.onReadLine = new chrome.Event();

///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

  this.onError = new chrome.Event();
};

SerialConnection.prototype.connect = function(Serial_COM_Port) {
  chrome.serial.connect(Serial_COM_Port, this.onConnectComplete.bind(this));
};

SerialConnection.prototype.onConnectComplete = function(connectionInfo) {
  if (!connectionInfo) {
    log("Connection failed.");
    return;
  }
  this.connectionId = connectionInfo.connectionId;
  chrome.serial.onReceive.addListener(this.boundOnDataReceiving);
  chrome.serial.onReceiveError.addListener(this.boundOnDataReceivingError);
  this.onConnect.dispatch();
};

SerialConnection.prototype.send = function(msg) {
  if (this.connectionId < 0) {
    throw 'Invalid connection';
  }
  chrome.serial.send(this.connectionId, String_to_ArrayBuffer(msg), function() {});     
};

SerialConnection.prototype.onDataReceiving = function(receiveInfo) {
  if (receiveInfo.connectionId !== this.connectionId) {
    return;
  }
  this.lineBuffer += ArrayBuffer_to_String(receiveInfo.data);

  var index;
  while ((index = this.lineBuffer.indexOf('\n')) >= 0) {    
    var line = this.lineBuffer.substr(0, index + 1);        

    console.log(line);
    ///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

    this.onReadLine.dispatch(line);
///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

    this.lineBuffer = this.lineBuffer.substr(index + 1);    
  }
};

SerialConnection.prototype.onDataReceivingError = function(errorInfo) {
  if (errorInfo.connectionId === this.connectionId) {
    this.onError.dispatch(errorInfo.error);
  }
};

SerialConnection.prototype.disconnect = function() {
  if (this.connectionId < 0) {
    throw 'Invalid connection';
  }
  chrome.serial.disconnect(this.connectionId, function() {});
};

var connection = new SerialConnection();    
connection.onConnect.addListener(function() {                       
    log('connected to: ' + Arduino_COM);                            
});                                                                 

///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

connection.onReadLine.addListener(function(line) {                  
    logJSON(line);                                                  
});                                                                     
///////////////////////////\\\\\\\\\\\\\\\/////////////\\\\\\\\\\////////\\\\\\\\\\\\////////\\\\\\\\\\//////PROBLEM

connection.connect(Arduino_COM);

function logJSON(result) {

    var response = jQuery.parseJSON( result );

    dimmer1_state = response.dimmer1_state;
    dimmer1_value = response.dimmer1_value;
    SerialIn = response.SerialIn;
    dimmer1_Chrome_Input = response.dimmer1_Chrome_Input;
    temperature1_value = response.temperature1_value;

    s=Math.round(dimmer1_value * 80 / 255 + 20);
    hsl='hsl(115,'+s+'%,60%)';

    if (dimmer1_state == 0)
    {
        $('#statusCircle').css('fill','hsl(115,20%,60%)');
    }
    else
    {
        $('#statusCircle').css('fill', hsl);
    };

    // Print led Status to HTML buffer area
    messaggio = "dimmer1 state: " + dimmer1_state 
                + "<br />dimmer1 value: " + dimmer1_value   
                + "<br />SerialIn: " + SerialIn 
                + "<br />dimmer1_Chrome_Input: " + dimmer1_Chrome_Input 
                + "<br />temperature1_value: " + temperature1_value + " °C";
    log(messaggio);
};


function log(msg) {
    $('#buffer').html(msg);
};

$(function(){
    $('#dimmer1_Chrome_Input')  .button()
                                .mousedown(function() {
                                    connection.send("101");
                                })
                                .mouseup(function() {
                                    connection.send("100");
                                });
});

1 个答案:

答案 0 :(得分:0)

代码是正确的,错误发生在程序的另一部分