Доступ к DOM с помощью nodejs + appjs + node-serial

У меня хорошо работает приложение appjs. Я пытаюсь в принципе либо вызвать существующую функцию JavaScript изнутри загруженной страницы на событие. ИЛИ получить доступ к элементам страниц события. Я использую библиотеку node-serial со сканером штрих-кода Honeywell. Я могу получить доступ к последовательному порту в порядке, я могу получить данные сканирования просто отлично с:

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 ответа

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>

Вы пытались получить к нему доступ из верхней части ваших файлов JS? Кажется, что Window не определено, а не $ instance.

Я сделал это в недавнем проекте для доступа к узлам DOM, используя jQuery в модуле узла, который я написал. Добавьте это в ваш файл app.js, он использует глобальную переменную Node

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

Это позволит вам использовать $ без префикса окна во всех ваших файлах / модулях узла.

Другие вопросы по тегам