【问题标题】:accessing dom with nodejs + appjs + node-serial使用 nodejs + appjs + node-serial 访问 dom
【发布时间】:2013-02-22 18:53:39
【问题描述】:

我有一个运行良好的 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 就绪功能上运行它,它就可以工作。我很迷茫,因为 appjs 的文档很少。谢谢!

【问题讨论】:

  • 你知道如何做到这一点了吗?

标签: node.js appjs node-serialport


【解决方案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>

【讨论】:

  • 您好,谢谢您的回复。当我尝试在 serialPort on data 函数中访问 window.$ 时,我得到与上述相同的错误:TypeError: Property '$' of object # is not a function
【解决方案2】:

您是否尝试过从 JS 文件的顶部访问它?似乎 Window 是未定义的,而不是 $ 实例。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2020-06-01
    • 2012-11-27
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多