В этом разделе перечислены свойства и методы объекта post
Пример использования:
//свойство параметра чтение/запись: // Чтение var prop = post.property; // Запись var prop = 'testString'; post.property = prop;
String post.objectName Только чтение
String post.postName Только чтение Оставлен для совместимости со скриптами jCjS v.1
Возвращает имя объекта поста
(настраивается в гл.конфигурационном файле. см. секцию post->objectName )
var postName = post.objectName;
bool post.isInitialized Только чтение
Если пост выполнил init.js без ошибок, возвратить true
String post.defDirs чтение/запись
Дефолтный каталог поста
(настраивается в гл.конфигурационном файле. см. секцию post->defDirs )
Рекомендуется дефолтный каталог поста настраивать в jcjs.xml
Альтернативный вариант: в init.js выполнить post.calcDefDirs();
var defDirs = post.defDirs; // "stuff@", если не установлен в jcjs.xml post.defDirs = 'stuff@postsTable'; // будет установлен как 'stuff@postsTable/'
bool post.isDebugging Только чтение
Пост нахоится в режиме отладки
bool post.isProfiling Только чтение
Пост находится в режиме профилирования производительности
Результат профилирования появится в лог файле после завершения работы приложения
Результат можно запросить функцией server.info()
Включить профилирование можно в настройках поста (секция post параметр profiling = "1")
Внимание! функционал существенно
снижает производительность и должен использоваться только для
оптимизации при разработке.
Не рекомендуется пользоваться Web-интерфейсом при включеном профилировании
void message(Variant data, String senderPostName) Сигнал
генерируется объектом post если ему пришло сообщение от стороннего поста
(сторонний пост вызвал метод post.send_toPost())
data - Присланные данные
senderPostName - Имя поста, отправившего сообщение
var таймер = new Timer();
таймер.timeout.connect(отправить);
таймер.start(2000);
function отправить() // Отправить сообщение посту
{
// Имя поста, которому адресовано сообщение
var toPostName = 'postsTable';
var данные_для_отправки = {}
данные_для_отправки.время = new Date();
данные_для_отправки.значение = new Date().valueOf();
данные_для_отправки.таймер = таймер; // ВНИМАНИЕ!!! могут передаваться и ссылки на Qt объекты
post.send_toPost(данные_для_отправки, toPostName);
// если не указывать имя получающего поста, сообщение разлетиться всем постам
//post.send_toPost(данные_для_отправки);
}
// Присоединить к сигналу post.message функцию get_mess
post.message.connect(get_mess);
function get_mess(данные, ктоОтправил)
{
// Посту прислали сообщение
post.log('пришло от "' + ктоОтправил + '": ' +
'время=' + данные.время + ' ' +
'значение=' + данные.значение)
//post.log('пришло от "' + ктоОтправил + '": ' + JSON.stringify(данные, null, 0))
}
void initialized() Сигнал
генерируется объектом post после того, как пост инициализирован
function pst_inited(){
// эта функция выполнится после того, как
// будет инициализирован пост
...
...
}
// подсоединить функцию pst_inited к сигналу server.initialized
post.initialized.connect(pst_inited);
void stop() Сигнал
генерируется объектом post при завершении работы поста
void sig_status(int) Сигнал
генерируется объектом post при смене его статуса
значение int см. server.status()
// подсоединить функцию func_status к сигналу post.sig_status
post.sig_status.connect(function func_status(val){
post.log('i', 'Сменился статус поста: ' + val)
});
void _exception(string) Сигнал
генерируется объектом post при возникновении исключения в скрипте
post._exception.connect(post, function exception(er){ post.log('e', '.\n\t'+er); });
undef = undef / undef; // сгенерировать ошибку
Можно организовать выход из приложения в случае ошибки инициализации
post._exception2exit = 1;
var excep = function exception(er){
if(!post._exception2exit) return;
//post.log('e', '.\n\t'+er);
server.logTrsh = 0; post.delay = 333; // завершить работу через 333 ms
post.evalScript("qAppQuit.js");
}
post._exception.connect(post, excep); // подсоединить к сигналу _exception функцию excep
server.initialized.connect(function(){ // при удачной инициализации
post._exception.disconnect(post, excep); // отсоединить от сигнала _exception функцию excep
delete post._exception2exit;
});
undef = undef / undef; // сгенерировать ошибку
Пример использования:
// Функция (возвращает некое значение) var arg1 = 12; var arg2 = 'text' + '/' + 'xml'; var prop = post.function(arg1, arg2, .....); // Процедура (без возвращаемого значения) post.proc(arg1, arg2, .....);
void post.send_toPost(Variant data, String toPostName) процедура
Отправить data посту с именем resiverPostName
Если toPostName не указывать, сообщение получат все посты
ВНИМАНИЕ!!! С помощью этой функции можно обмениваться ссылками на Qt объекты между разными контекстами JS
var данные_для_отправки = {}
данные_для_отправки.время = new Date();
данные_для_отправки.значение = new Date().valueOf();
данные_для_отправки.post = post; // Возможно и такое, но доступ к Qt объекту на приемной стороне
// будет возможен только к C++ функциям и свойствам переданного объекта
// Имя поста, которому адресовано сообщение
var toPostName = 'postsTable'
// Отправить сообщение посту
post.send_toPost(данные_для_отправки, toPostName);
String post.stringify(obj,def,int) Функция
Сериализовать объект
Эта функция аналогична JSON.stringify но лишена некоторых недостатков
Похожая функция есть у объекта jsext см.
jsext.stringify(), но она некоректно работает с объектами Qt
// типичная ошибка JSON при ссылании свойства объекта на себя
post.p = post;
try{
post.log(JSON.stringify(post, 0, 2)) // Ошибка "cannot serialize cyclic structures"!!! В объекте циклическая ссылка
}catch(e){
post.log("e", e.fileName + ':' + e.lineNumber + ' "' + e.message + '"');
post.log(post.stringify(post, 0, 2)) // Все ОК
}
String post.info(String ask) Функция
Запросить информацию у поста.
Аргументы:
| ask | Описание возвращаемого значения |
|---|---|
| 'ask' | Выдать все поддерживаемые запросы |
| 'status' | статус поста см. post.status |
| 'timeStart' | Дата и время запуска поста |
| 'timeWork' | Сколько времени работает |
| 'timeWorkStr' | Сколько времени работает в формате '219 сут. 12:25:15' |
var inDirFiles = post.info('ask');
var allClients = post.info('timeWorkStr');
String post.status() Функция
Запросить статус поста.
Возвращаемые значения см.
server.status() и
server.status(postName)
post.log('i', 'Статус поста: ' + post.status());
int post.statusInt() Функция
Запросить статус поста.
Возвращаемые значения см.
server.statusInt()
post.log('i', 'Статус поста: ' + post.statusInt());
void post.log('level', msg) Процедура
Записать в лог информацию
Первый аргумент задает уровень сообщения
ВНИМАНИЕ!!! Сообщение может не попасть в лог, если задан низкий уровень фильтра
(см. секцию server->logTrsh главного конфигурационного файла)
post.log('e', 'Сообщение об ошибке');
post.log('w', 'Предупреждающее сообщение');
post.log('i', 'Информационное сообщение');
post.log('d', 'Дебаговое сообщение');
post.log('t', 'Трассировочное сообщение');
void post.moveConnectionToDelay(connectionName = '') Процедура
поместить ссылку текущего соединения http в список отложенных
Аргумент connectionName - имя создаваемого соединения. Если не указано, сгенерируется сервером
ВНИМАНИЕ!!! В обработчике, после завершения работы с соединением, необходимо вызвать post.removeDelayConnection
Пример использования отложенных соединений
if(http.argExist("delay"))
{
post.log('i', "делаем отложенное соединение " + new Date().valueOf());
// поместить текущее соединение в список отложенных
var d_conn = post.moveConnectionToDelay();
// Создать объект генерирующий событие
d_conn.t = new Timer();
//вместо таймера на сервере может использоваться любой
//объект, генерирующий события, например, элеватор
// Создать функцию обработчик события
d_conn.funcAns = function()
{
// Событие произошло, можно ответить браузеру
this.setBody("отложенное соединение "+this.objectName+" - ok");
this.respContentType("text/plain");
// Удалить таймер и отложенное соединение
this.t.deleteLater(); delete this.t;
post.removeDelayConnection(this);
};
// Запустить таймер
d_conn.t.single(3000);
// приконнектить к событию timeout таймера функцию обработчик
d_conn.t.timeout.connect(d_conn, d_conn.funcAns);
return;
}
void post.removeDelayConnection(delayConn) Процедура
Отдать соединение серверу (см. post.moveConnectionToDelay)
int post.deleteObject(var1,var2,var3,var4) Функция
Удалить все Qt объекты содержащиеся в аргументе(ax)
Первый аргумент обязательный.
Аргументами могут быть различные объекты и строки
Возвращает количество удаленных объектов
ВНИМАНИЕ!!! Все Qt объекты находящиеся в переданных аргументах помечаются к удалению и будут удалены через некоторое время.
ВНИМАНИЕ!!! Если эту процедуру необходимо вызывать в обработчике отложенного соединения, то соединение будет удалено и не возвращено серверу. Вместо этого используйте post.removeDelayConnection
try{String(JCJSTcpServer)}catch(e){
post.loadPlugin('PluginNetwork').install(scriptEngine);
}
post.c = {}
post.c.a = '----1'
post.c.b = '----2'
post.c.c = '----3'
post.c.d = '----4'
post.c.e = new JCJSTcpClient();
post.c.f = new JCJSTcpServer();
post.c.g = new JCJSUdpRecv();
post.c.x = post.c.e
post.c.y = post.c.f
post.c.z = post.c.g;
post.tmr = new Timer();
post.log(JSON.stringify(post, null, 3));
post.deleteObject(obj) // Корректное удаление всех объектов
post.log(JSON.stringify(post, null, 3));
//------------------------------------------
// возможен и такой вариант
post.log(jsext.objToString(obj));
post.deleteObject(obj.c.e) //но ссылки на удаленные объекты все равно остаются в obj
post.deleteObject([obj.c.f, obj.c.g])
delete obj.c.e // Удалить ссылки придется вручную
delete obj.c.f
delete obj.c.g
post.log(jsext.objToString(obj));
post.deleteObject(this); // Все Qt объекты находящиеся в текущем контексте будут помечены к удалению
bool post.existScript(sname) Функция
выяснить существование скрипта по специальному имени (синонему)
Аргументом может выступать синонем типа 'stat@js/jcjsHelper.js'
или просто наименование файла, тогда будет произведен поиск его в каталогах include
(см. секцию server->folders->inc файла jcjs.xml )
void post.calcDefDirs() Процедура
Установить дефолтный каталог поста defDirs относительно инициализирующего скрипта init.js
Если секция post->handlers->init объявлена как "stuff@postsTable/init.js"
то defDirs будет установлен как "stuff@postsTable"
(см. секцию post->defDirs файла jcjs.xml )
(см. секцию post->handlers->init файла jcjs.xml )
if(post.defDirs == "stuff@")
{
post.calcDefDirs();
}
String post.loadScript(sname) Функция
Вернуть содержимое скрипта по специальному имени (синонему)
Аргументом может выступать синонем типа 'stat@js/jcjsHelper.js'
или просто наименование файла, тогда будет произведен поиск его в каталоге defDirs и в каталогах inc
(см. секцию post->defDirs файла jcjs.xml )
(см. секцию server->folders->inc файла jcjs.xml )
var script_string = post.loadScript('jcjsHelper.js');
if(script_string != '')
{
try{
eval(script_string); // Выполнить
}
catch(e)
{
post.log("e", 'Eval ERR: ' + e.fileName + ':' + e.lineNumber + ' "' + e.message + '"');
}
}
else
{
post.log('e', 'Скрипт jcjsHelper.js не найден в каталоге поста и дефолтных каталогах');
}
Variant post.evalScript(sname) Функция
выполнить скрипт по специальному имени (синонему)
Аргументом может выступать синонем типа 'stat@js/jcjsHelper.js'
или просто наименование файла, тогда будет произведен поиск его в каталоге defDirs и в каталогах inc
(см. секцию post->defDirs файла jcjs.xml )
(см. секцию server->folders->inc файла jcjs.xml )
post.evalScript('jcjsHelper.js');
// Такой метод подгрузки скриптов предпочтительней чем post.loadScript()
Variant post.evalString(jsString, scriptName="") Функция
выполнить тело скрипта
Второй аргумент не обязателен
var script_string = post.loadScript('jcjsHelper.js');
if(script_string != '')
{
post.evalString(script_string, 'jcjsHelper.js'); // Выполнить
}
else
{
post.log('e', 'Скрипт jcjsHelper.js не найден в каталоге поста и дефолтных каталогах');
}
String post.includeSpecialFile(String sname) Функция
Обработка спецфайла.
Для простого включения необходимо воспользоваться функцией server.includeSpecialFile
String post.findSpecialFileName(sname) Функция
Поиск файла по специальному имени (синонему)
Аргументом может выступать синонем типа 'stat@js/jcjsHelper.js'
или просто наименование файла, тогда будет произведен поиск его в каталоге defDirs и в каталогах inc
(см. секцию post->defDirs файла jcjs.xml )
(см. секцию server->folders->inc файла jcjs.xml )
var fname = post.findSpecialFileName('jcjsHelper.js');
var script_string = post.loadScript(fname);
bool post.install(String className) Функция
В jCjSGui существует возможность создавать оконные приложения
var browser;
// Установить конструктор объекта в QScriptEngine
if(post.install('QJCJSWidget')
{
// Создать объект, к свойствам и
// методам которого можно обращаться в стиле Qt
var jcjsWidget = new QJCJSWidget();
jcjsWidget.minimumSize = new QSize(800, 600);
jcjsWidget.windowTitle = "TEST QWebView";
// Плавное появление окна (определено только в QJCJSWidget)
jcjsWidget.softShow(350);
jcjsWidget.windowAutoCenter = true
// обслуживание изменения размера окна
// Для примера автоматическая центровка окна
jcjsWidget.window_resize.connect(function window_resize(){
post.log("i", "" + jcjsWidget.size)
browser.size = jcjsWidget.size
});
}
// ---------------------------------------------------- QWebView
// Установить конструктор объекта
if(post.install('QWebView')
{
browser = new QWebView(jcjsWidget);
browser.pos = new QPoint(0,0);
browser.minimumSize = new QSize(800, 600);
browser.size = jcjsWidget.size;
browser.url = new QUrl((server.https?'https':'http')+ '://127.0.0.1:' +server.http_port+ '/');
browser.show();
browser.lower();
}
В таблице представлены все поддерживаемые классы
| Наименование | Описание |
|---|---|
| QBoxLayout | The QBoxLayout class lines up child widgets horizontally or vertically. |
| QCalendarWidget | The QCalendarWidget class provides a monthly based calendar widget allowing the user to select a date. |
| QCheckBox | The QCheckBox widget provides a checkbox with a text label. |
| QColumnView | The QColumnView class provides a model/view implementation of a column view |
| QComboBox | The QComboBox widget is a combined button and popup list. |
| QCommandLinkButton | The QCommandLinkButton widget provides a Vista style command link button. |
| QDateEdit | The QDateEdit class provides a widget for editing dates based on the QDateTimeEdit widget |
| QDateTimeEdit | The QDateTimeEdit class provides a widget for editing dates and times. |
| QDeclarativeView | The QDeclarativeView class provides a widget for displaying a Qt Declarative user interface |
| QDial | The QDial class provides a rounded range control (like a speedometer or potentiometer) |
| QDialogButtonBox | The QDialogButtonBox class is a widget that presents buttons in a layout that is appropriate to the current widget style |
| QDockWidget | The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-level window on the desktop |
| QDoubleSpinBox | The QDoubleSpinBox class provides a spin box widget that takes doubles |
| QFontComboBox | The QFontComboBox widget is a combobox that lets the user select a font family |
| QFormLayout | Класс QFormLayout управляет формами виджетов ввода и связанных с ними меток. |
| QFrame | The QFrame class is the base class of widgets that can have a frame |
| QGraphicsView | Класс QGraphicsView предоставляет виджет для отображения содержимого QGraphicsScene |
| QGroupBox | The QGroupBox widget provides a group box frame with a title |
| QHBoxLayout | The QHBoxLayout class lines up widgets horizontally |
| QLCDNumber | The QLCDNumber widget displays a number with LCD-like digits |
| QLabel | The QLabel widget provides a text or image display |
| QLineEdit | The QLineEdit widget is a one-line text editor |
| QListView | Класс QListView является представлением в виде списка или пиктограммы в модели |
| QListWidget | The QListWidget class provides an item-based list widget |
| QMainWindow | Класс QMainWindow предоставляет главное окно приложения |
| QMdiArea | The QMdiArea widget provides an area in which MDI windows are displayed |
| QPlainTextEdit | The QPlainTextEdit class provides a widget that is used to edit and display plain text |
| QProgressBar | The QProgressBar widget provides a horizontal or vertical progress bar |
| QPushButton | The QPushButton widget provides a command button |
| QRadioButton | The QRadioButton widget provides a radio button with a text label |
| QScrollArea | The QScrollArea class provides a scrolling view onto another widget. |
| QScrollBar | The QScrollBar widget provides a vertical or horizontal scroll bar |
| QSlider | The QSlider widget provides a vertical or horizontal slider |
| QSpinBox | The QSpinBox class provides a spin box widget |
| QStackedWidget | The QStackedWidget class provides a stack of widgets where only one widget is visible at a time |
| QTabWidget | Класс QTabWidget предоставляет набор виджетов со вкладками |
| QTableView | The QTableView class provides a default model/view implementation of a table view |
| QTableWidget | The QTableWidget class provides an item-based table view with a default model |
| QTextBrowser | The QTextBrowser class provides a rich text browser with hypertext navigation |
| QTextEdit | The QTextEdit class provides a widget that is used to edit and display both plain and rich text/TD> |
| QTimeEdit | The QTimeEdit class provides a widget for editing times based on the QDateTimeEdit widget |
| QToolBox | The QToolBox class provides a column of tabbed widget items |
| QToolButton | The QToolButton class provides a quick-access button to commands or options, usually used inside a QToolBar |
| QTreeView | The QTreeView class provides a default model/view implementation of a tree view |
| QTreeWidget | Класс QTreeWidget предоставляет структурный вид, который использует предопределённую модель дерева |
| QVBoxLayout | The QVBoxLayout class lines up widgets vertically |
| QWidget | Класс QWidget является базовым для всех объектов пользовательского интерфейса |
| QWebView | The QWebView class provides a widget that is used to view and edit web documents |
void post.setGlobalObject(name, var) Процедура
Создать переменную или объект var с глобальным именем name
// создать глобальную переменную с именем dac_clear и значением false
post.setGlobalObject('dac_clear', false);
//---- предыдущая запись равноценна следующей (обявление переменной без ключевого слова var)
// создать глобальную переменную с именем dac_clear и значением false
dac_clear = false;
// в скрипте modul.js
function test_func(){
return 'test';
}
post.setGlobalObject('test_func', test_func); // объявить функцию глобальной
//------------
// в init.js
post.evalScript("modul.js"); // выполнить скрипт modul.js
// все переменные созданные в нем недоступны в init.js
// кроме объявленых глобальными setGlobalObject
post.log(test_func()); // вернет 'test'
function createOb(){
var obj = { val: 0 }; // создать объект в функции (вне ее недоступен)
post.setGlobalObject('test_obj', obj); // и объявить его глобальным с именем test_obj
obj.val = 1234;
console.log(obj);
}
createOb(); // выполнить функцию, в которой создается объект
console.log(test_obj); // теперь объект test_obj доступен везде
//---- предыдущая запись равноценна следующей
(function createOb(){
var obj = { val: 0 }; // создать объект в функции (вне ее недоступен)
post.setGlobalObject('test_obj', obj); // и объявить его глобальным с именем test_obj
obj.val = 1234;
console.log(obj);
})();
console.log(test_obj); // теперь объект test_obj доступен везде
var obj = { v1: 0 }; // создать объект
post.setGlobalObject('test_obj', obj); // объявить его глобальным с именем test_obj
obj.v1 = 1234;
console.log(obj); // возвратит { v1: 1234 }
console.log(test_obj); // возвратит { v1: 1234 }
// переменные test_obj и obj ссылаются на один и тот-же объект
test_obj.v2 = 4321;
console.log(obj); // возвратит { v1: 1234, v2: 4321 }
console.log(test_obj); // возвратит { v1: 1234, v2: 4321 }
object post.globalObject() функция
Возвращяет глобальный объект this
Object post.loadPlugin(name = '') Функция
Загрузить плагин возвратить его объект (если у плагина есть функция .install(), то она будет вызвана автоматически)
Аргумент name указывает имя плагина.
// Загрузить плагин и присвоить его объект переменной
var pluginSQL = post.loadPlugin('PluginSQL');
bool post.isLoadedPlugin(name) Функция
Проверка, что плагин используется постом
bool post.unloadPlugin(name) Функция
Выгрузать плагин
Аргумент name указывает объект плагина или имя плагина.
// Загрузить плагин и присвоить его объект переменной
var pluginSqlObj = post.loadPlugin('PluginSQL');
...
// Установить в JS конструторы объектов
pluginSqlObj.install(scriptEngine);
// Создать объект
var db = new JCJS_SQL();
db.driverName = 'QSQLITE';
if(post.unloadPlugin('PluginSQL'))
{
post.log("i", "Плагин выгружен")
delete pluginSqlObj;
} else {
post.log("e", "Плагин не выгружен")
}
// Внимание!!! Все порожденные от плагина объекты будут удалены.
// Это затронет все посты, которые используют плагин
// объект db после удаления плагина недоступен
// любые обращения к объекту или его свойства
// породит ошибку выполнения
bool post.processEvents(uint16 ms = 5) Функция
Дать jCjS выполнить накопленные события
Аргумент ms - количество времени для выполнения (по умолчанию 5 ms).
Возвращает true, если пост начал останов.
Внимание! Очень полезная функция, если в JS-контексте выполняются
долгие циклы (например большие выборки из БД)
// Следующий код "заморозит" процесс jCjS(все посты выполняются в одном потоке)
// Перестанут выполняться ответы на HTTP запросы
while(true){}
// ... но если выполнить так, то таких проблем не будет.
// К примеру процесс jCjSGui будет более отзывчивым
while(true){ post.processEvents(); }
// Запист, равноценная предидущей
while(true){ post.processEvents(5); }
void post.throwScript(String) Процедура
Генерация исключения
function testVal(val)
{
if(typeof val !== 'object')
return post.throwScript('аргумент не объект');
...
}
StringList post.stack() Функция
Возврящает цепочку вызовов
function test(){
post.log(JSON.stringify(post.stack(),0,2))
}
test();
/* выведет в лог
[
"test() at jcjsHelper.js:340",
"{eval}() at jcjsHelper.js:342",
"evalScript(sname = 'jcjsHelper.js') at -1",
"{eval}() at stuff@include/init.js:4",
"evalScript(sname = 'stuff@include/init.js') at -1",
"{global}() at initServer.js:2"
]
*/
Для вывода отладочных сообщений удобно использовать функцию post.logt(),
описанную в файле jcjsHelper.js. В лог выводятся одновременно аргументы и стек
var v1 = 'abcdef',
v2 = 12345,
v3 = {g: 1, h: 'xyz'};
post.logt(v1, v2, v3);
/* выведет в лог
[
"arguments: ['abcdef',12345,{'g':1,'h':'xyz'}]",
"{eval}() at jcjsHelper.js:342",
"evalScript(sname = 'jcjsHelper.js') at -1",
"{eval}() at stuff@include/init.js:4",
"evalScript(sname = 'stuff@include/init.js') at -1",
"{global}() at initServer.js:2"
]
*/
StringList post._debug() Функция
Выводит отладочные переменные
Внимание! вывод отладочных сообщений не записывается в лог
и доступен только в jCjSService при запуске с параметром -e
var v1 = 'abcdef',
v2 = 12345,
v3 = {g: 1, h: 'xyz'};
post._debug(v1, v2, v3)
/* выведет в stderr (минуя лог файл)
jcjsHelper.js:336 ()
arg1: "abcdef"
arg2: 12345
arg3: QMap(("g", QVariant(int, 1) ) ( "h" , QVariant(QString, "xyz") ) )
*/
String post.position() Функция
Выводит имя функции, файла, поста и номер строки
post.log( post.position() ); /* выведет в log jcjsHelper.js:336 test() postsTable: */
String profilingResultsGetStrn(int sortBy = 0, bool full = false)
StringList profilingResultsGetList(int sortBy = 0, bool full = false) Функция
Выводит накопленую профайлером информацию
Аргумент sort может принимать значения 1, 2 или 3
он влияет на столбец сортировки (Calls, Average time, Total time)
Аргумент full может принимать значения 0 или 1
Object xml2obj(String xmlFileName) Функция
Преобразует xml файл в JS объект
Первый аргумент xmlFileName - полное или относительное имя файла
Дополнительные аргументы (не обязательные)
Object xmlString2obj(String xmlString) Функция
Преобразует xml строку в JS объект
Первый аргумент xmlString - строка содержащая xml
Дополнительные аргументы (не обязательные)
var objСonfig = post.xml2obj('./R/config.xml'); // Преобразует xml файл в JS объект
post.log('i', JSON.stringify(objСonfig, 0, 2));
var objParams = post.xml2obj('./cfg/params.xml', false); // отключить поддержку чисел (первый bool аргумент)
post.log('i', JSON.stringify(objParams, 0, 2));
var objParams = post.xml2obj('./cfg/params.xml', 1, 0); // отключить поддержку boolean (второй bool аргумент)
post.log('i', JSON.stringify(objParams, 0, 2));
String server.getAbsPath(path, fromDir = '') Функция
String server.getRelPath(path, fromDir = '') Функция
getAbsPath - Преобразует относительный путь в абсолютный
getRelPath - Преобразует абсолютный путь в относительный
Если аргумент fromDir не указан, то будет использована директория поста
В случае отсутствия файла, поиск будет продолжен в директории с исполнительным файлом,
а затем и в корне приложения jCjS
post.menu_add(icoFile, text, func) Функция
post.menu_sep(pos) Функция
Добавить в трей пользовательское меню
Возвращают объект post
var ico = server.parseSpecialFileName("/full/path/to/img/file/0.png"); // полный путь к иконке
var ico = ":/img/quit.png"; // встроенная в res иконка
function menu_exit_click(){
post.log(new Date().valueOf() + ': click');
// очистить от всех добавленых меню
post.menu_clear(); // можно не выполнять, т.к. очистка происходит автоматически
// завершить приложение через 2 сек
server.singleShot(2222, function(){
server.deleteLater();
});
}
// добавить свое меню в трей
post.menu_add(ico, 'Нажать для выхода 1', menu_exit_click)
.menu_sep(1) // добавить разделитель
.menu_add(ico, 'Нажать для выхода 2', menu_exit_click);
void post.menu_clear(number = -1) Процедура
Удалить все меню созданные этим постом (если указан номер меню, будет удалено одно)
При выгрузке поста все созданные постом меню очищаются автоматически
post.menu_clear(); // Удалить все меню post.menu_clear(0); // Удалить первое созданное меню
Устаревшие функции (не рекомендуются к использованию)
Object post.newTimer(name = '') Функция (удалена)
Создает объект jCjSTimer и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameTimer = 'postTimer'; post.newTimer(nameTimer); // или var t = post.newTimer(nameTimer) post[nameTimer].single(2000); // или post.postTimer.single(2000) // Рекомендованное использование var t = new Timer(); t.single(2000); // Или в как в устаревшем варианте var t = new Timer(); t.objectName = 'postTimer' var nameTimer = t.objectName post[nameTimer] = t; post[nameTimer].single(2000); // или post.postTimer.single(2000) или t.single(2000)
Object post.newBlobMem(name = '') Функция (удалена)
Создает объект BlobMemory и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameBlob = 'postBlob'; post.newBlobMem(nameBlob); // или var b = post.newBlobMem(nameBlob) // Работа с объектом post[nameBlob] или post.postBlob // Рекомендованное использование var b = new BlobMemory(); // ВНИМАНИЕ! Удалено! в #r824 уже отсутствует. Используйте ByteArray // Работа с объектом b.prop // Или в как в устаревшем варианте var b = new BlobMemory(); b.objectName = 'postBlob' post[nameBlob] = b; // Работа с объектом b.prop post[nameBlob].prop post.postBlob.prop
Object post.newFile(name = '') Функция (удалена)
Создает объект jCjSFile и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameFile = 'postFile'; post.newFile(nameFile); // или var f = post.newFile(nameFile) // Работа с объектом post[nameFile] или post.postFile // Рекомендованное использование var f = new File(); // Работа с объектом f.prop // Или в как в устаревшем варианте var f = new File(); f.objectName = 'postFile' post[nameFile] = f; // Работа с объектом f.prop post[nameFile].prop post.postFile.prop
Object post.newSerialPort(name = '') Функция (удалена)
Создает объект jCjSSerialPort и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameSerialPort = 'postSerialPort'; post.newSerialPort(nameSerialPort); // или var s = post.newSerialPort(nameSerialPort) // Работа с объектом post[nameSerialPort] или post.postSerialPort // Рекомендованное использование var s = new SerialPort(); // Работа с объектом s.prop // Или в как в устаревшем варианте var s = new SerialPort(); s.objectName = 'postSerialPort' post[nameSerialPort] = s; // Работа с объектом s.prop post[nameSerialPort].prop post.postSerialPort.prop
Object post.newSerialTask(name = '') Функция (удалена)
Создает объект jCjSSerialTaskWrap и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameSerialTask = 'postSerialTask'; post.newSerialTask(nameSerialTask); // или var s = post.newSerialTask(nameSerialTask) // Работа с объектом post[nameSerialTask] или post.postSerialTask // Рекомендованное использование var s = new SerialTaskWrap(); // Работа с объектом s.prop // Или в как в устаревшем варианте var s = new SerialTaskWrap(); s.objectName = 'postSerialTask' post[nameSerialTask] = s; // Работа с объектом s.prop post[nameSerialTask].prop post.postSerialTask.prop
Object post.newRequester(name = '') Функция (удалена)
Создает объект jCjSHttpRequester и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameRequester = 'postRequester'; post.newRequester(nameRequester); // или var r = post.newRequester(nameRequester) // Работа с объектом post[nameRequester] или post.postRequester // Рекомендованное использование var r = new HttpRequester(); // Работа с объектом r.prop // Или в как в устаревшем варианте var r = new HttpRequester(); r.objectName = 'postRequester' post[nameRequester] = r; // Работа с объектом r.prop post[nameRequester].prop post.postRequester.prop
Object post.newSQLite(name = '') Функция (удалена)
Создает объект jCjSSQLite и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
ВНИМАНИЕ!!! В текущей реализации этот функционал вырезан, пользуйтесь плагином PluginSQL
// устаревшее применение
var nameSQLite = 'postSQLite';
post.newRequester(nameSQLite); // или var db = post.newRequester(nameSQLite)
// Работа с объектом post[nameSQLite] или post.postSQLite
// Рекомендованное использование
// Загрузить плагин и Установить в JS конструторы объектов
var pluginSQL = post.loadPlugin('PluginSQL').install(scriptEngine);
// Создать объект
var db = new JCJS_SQL();
db.driverName = 'QSQLITE';
....
Object post.newDataQueue(name = '') Функция (удалена)
Создает объект jCjSDataQueue и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameDataQueue = 'postDataQueue'; post.newDataQueue(nameDataQueue); // или var q = post.newDataQueue(nameDataQueue) // Работа с объектом post[nameDataQueue] или post.postDataQueue // Рекомендованное использование var q = new DataQueue(); // Работа с объектом q.prop // Или в как в устаревшем варианте var q = new DataQueue(); q.objectName = 'postDataQueue' post[nameDataQueue] = q; // Работа с объектом q.prop post[nameDataQueue].prop post.postDataQueue.prop
Object post.newStringQueue(name = '') Функция (удалена)
Создает объект jCjSStringQueue и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
// устаревшее применение var nameStringQueue = 'postStringQueue'; post.newStringQueue(nameStringQueue); // или var q = post.newStringQueue(nameStringQueue) // Работа с объектом post[nameStringQueue] или post.postStringQueue // Рекомендованное использование var q = new StringQueue(); // Работа с объектом q.prop // Или в как в устаревшем варианте var q = new StringQueue(); q.objectName = 'postStringQueue' post[nameStringQueue] = q; // Работа с объектом q.prop post[nameStringQueue].prop post.postStringQueue.prop
Object post.newPainter(name = '') Функция (удалена)
Создает объект QJCJCPainter и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
ВНИМАНИЕ!!! Доступно только в jCjSGui
// устаревшее применение
var namePainter = 'postPainter';
post.newPainter(namePainter); // или var q = post.newPainter(namePainter)
// Работа с объектом post[namePainter] или post.postPainter
// Рекомендованное использование
post.install('QJCJCPainter')
var q = new Painter();
// Работа с объектом q.prop
// Или в как в устаревшем варианте
post.install('QJCJCPainter')
var q = new Painter();
q.objectName = 'postPainter'
post[namePainter] = q;
// Работа с объектом q.prop post[namePainter].prop post.postPainter.prop
Object post.newUI(name = '') Функция (удалена)
Создает объект QJCJCUi и возвращает его
Аргумент name задает имя объекту. Если не задано, будет сгенерировано сервером.
После создания доступ к объекту через post[name]
ВНИМАНИЕ!!! Доступно только в jCjSGui
// устаревшее применение
var nameUi = 'postUi';
post.newUI(nameUi); // или var u = post.newUI(nameUi)
// Работа с объектом post[nameUi] или post.postUi
// Рекомендованное использование
post.install('QJCJCui')
var u = new Ui();
// Работа с объектом u.prop
// Или в как в устаревшем варианте
post.install('QJCJCui')
var u = new Ui();
u.objectName = 'postUi'
post[nameUi] = u;
// Работа с объектом u.prop post[nameUi].prop post.postUi.prop