Главная

Руководство: Взаимодействие HTML с Data-скриптом

Взаимодействие HTML с Data-скриптом

MTCHANNEL - это транспорт, позволяющий из HTML-шаблона передавать данные в браузер или data-скрипт.

Как подключить mtchannel:

  • В мета файле прописывается apiversion = 2
  • В HTML-шаблоне {{MTCHANNEL|safe}}

После подключения становится доступным объект stmobile.

Методы stmobile:

Запустить функцию из дата-скрипта в основном потоке
stmobile.channel.send(functionName, data, callback)

Запустить функцию из дата-скрипта в отдельном потоке (так можно запустить несколько функций одновременно)
stmobile.channel.sendToThread(functionName, data, callback)

  • functionName - имя функции, вызываемой в data-скрипте, в виде строки.
  • data - передаваемые в вызываемую функцию данные.
  • callback - возвращаемый результат из data-скрипта, в виде функции.

Callback, который будет вызываться каждый раз при смене статуса активности страницы.
stmobile.observer.onViewStatusChanged Если страница сейчас видна пользователю, статус равен 'ViewActive'. Если страница перекрыта другой страницей (отчёт, форма, msgbox), статус равен 'ViewInactive'.
Пример: перезагрузка страницы после возврата из формы

<-------------------- HTML-шаблон ------------------->
{{MTCHANNEL|safe}}
<script type="text/javascript">
    stmobile.observer.onViewStatusChanged = function(status) {
        if (status == 'ViewActive') stmobile.channel.send('reload');
    };
</script>

<-------------------- Дата-скрипт ------------------->
function reload() {
    api.builder.reload();
}

stmobile.launcher.open(uri)

  • uri - идентификатор ресурса.

stmobile.launcher.close()

stmobile.launcher.openUrl(url, mode)

stmobile.launcher.openHtml(url, mode)

stmobile.launcher.openPdf(url, mode)

stmobile.launcher.openImage(url, mode)

  • url - ссылка
  • mode - режим открытия external(во внешнем браузере), internal(в окне МТ), default (если не удалось открыть в МТ, то в браузере)

Пример: Мета фаил:

[params]
uri = stmobile://report/routereports/channeltest
title    = qsTr("Тест WebChannel")
contentType = "html"
apiversion = 2
outputPath = "/"

[files]
script   = "channel.js"
template = "channel.html"

Data-скрипт (channel.js):

function init() {}

function data() {}

function test1() {
    api.log.debug("js: test1")
    return "test1_ret"
}

HTML-шаблон (channel.html):

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="viewport" content="width=device-width, initial-scale=1">


<script src='qrc:/extensions/libs/jquery-1.8.3.min.js'></script>

<script type="text/javascript">

function test1() {

    stmobile.channel.send('test1', '', function(ret) {
        $('#test1').text(ret);
    })
}

function launcherOpenTasks() {
    stmobile.launcher.open("stmobile://tasks/hub")
}
</script>

{{MTCHANNEL|safe}}

</head>
<body>

<button onclick="test1()">test1</button> <span id="test1"> def </span></br></br>
<button onclick="launcherOpenTasks()">launcherOpenTasks</button></br>

</body>
</html>