В этом разделе перечислены свойства и методы объекта post

Свойства (property)

Пример использования:

//свойство параметра чтение/запись:

// Чтение
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); // Удалить первое созданное меню


Устаревшие функции: Удалены в jCjS начиная с версии jCjS v.2.5

Устаревшие функции (не рекомендуются к использованию)

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



  • Описание объектов