使用nodejs + appjs + node-serial访问dom

时间:2013-02-22 18:53:39

标签: node.js appjs node-serialport

我有一个运行良好的appjs应用程序。我试图基本上从事件的加载页面内调用现有的javascript函数。或访问事件的页面元素。我正在使用带有霍尼韦尔条码扫描器的节点串行库。我可以很好地访问串口,我可以通过以下方式获得扫描数据:

serialPort.on('data', function(data) { ... });

我想要做的是,如上所述,在页面上调用javascript函数,即

window.document.body.scan(data);

或至少访问数据并能够使用节点调用/发出http请求,我也可以做得很好。当我在

中运行这些东西时
window.on('ready', function(){ ... });

我能够很好地访问页面上的元素。即。

var $ = window.$;
$("#message").html('Something...');

但是,如果我尝试在serialPort.on数据函数中运行完全相同的代码,我会收到错误,如

        $('#message').html('Please wait...');
        ^
TypeError: object is not a function...

甚至是$(“#message”)。html“html”不是一个函数。但是,如果我在window.on ready函数上运行它,它的工作原理。我很丢失,因为appjs的文档很少。谢谢!

2 个答案:

答案 0 :(得分:1)

serialPort.on('data',function(){...});代码正在AppJS中运行,因此要访问需要使用Window变量的窗口,请尝试将代码更改为:

window.$('#message').html('Please wait...');

为了能够调用自定义函数(称为扫描),请在window.on('ready',function(){...})中执行以下操作;

window.scan = function() {
    //code to connect to the scanner here.
    console.log("scan run");
}

然后在html页面的某个地方,你可以调用那个函数:

 <body>
 <button onclick="window.scan();">Scan Now!</button>
 </body>

答案 1 :(得分:0)

您是否尝试过从JS文件的顶部访问它?看起来Window是未定义的而不是$ instance。

我在最近的一个项目中这样做,在我编写的节点模块中使用jQuery访问DOM节点。 将其添加到 app.js 文件中,使用Node global variable

// Under your window definition
global.$ = window.$;

这将允许您在所有节点文件/模块中使用$而不使用窗口前缀。