Всем спасибо. Решилось выставлением нужного заголовка + предварительно загруженной десктопной версией сайта (если просто загружать по всем вариантам, как описано выше, то выдавало ошибку, без понятия почему)
Как в вебинтерфейсе выводить постоянно результат потока?
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox Не знаком, изучаю. Нет ли примера передачи данных через переменную?
Все примеры я беру из головы, вывод данных из неё к сожалению занимает уйму времени
:D.Думаю для ваших целей идеально подойдёт действие "Результат" и обработчик событий на него в интерфейсе
https://wiki.bablosoft.com/web-interface/#/gettingscriptstatistics?id=event-resultcreated() { var self = this /////Обработчик событий api Api.SetEventHandler(function (EventType, EventData) { if (EventType == "result") { var TabNumber = EventData["number"] Api.DownloadResult(TabNumber).then((res) => { self.Log = res }) } } } -
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Спасибо, а подскажите как теперь этот результат в значение писать?
Верно я понял, что я могу в HTML указать {{ResultSaver}}, а здесь добавить строку this.ResultSaver = res и в HTML обновится?
Да, благодаря реактивности в html значение изменится сразу же, как поменяется переменная. Это не будет работать если вы будете обновлять свойства объекта или массив по индексу
https://ru.vuejs.org/v2/guide/reactivity.html -
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox Если мы создаем в "created" обработчик переменной result, то запустик кликом функцию в BAS, которая зациклена в BAS переходом, не выйдет постоянно ловить новое значение?
Чегось?
-
@Fox У меня вот такой JS код:
$(document).ready(function() { var app = new Vue({ el: '#Main', data: { Log: [], Thread: null, ParseResult: "", Error: "" }, Mounted() { setInterval(() => this.parseres(), 2000); }, methods: { Parse: async function(loop) { var self = this this.ParseResult = "" this.Thread = new BASThread() var Result = await this.Thread.RunFunction("Parse", {}) this.ParseResult = Result setTimeout(function(){ Parse(loop); }, loop); }, Stop: async function() { if (!this.IsRunning) { return; } this.Log = [] this.Error = "" this.Thread.StopThread() this.IsRunning = false; } } }) /////Api event handler Api.SetEventHandler(function(EventType, EventData) { /////Script started if (EventType == "start") {} /////Script stopped if (EventType == "stop") {} if (EventType == "log") { //Obtain log text var LogText = EventData["text"] this.ParseResult = LogText }; /////More events: https://wiki.bablosoft.com/web-interface/#/managingscriptlifetime }) /////Automatically start script https://wiki.bablosoft.com/web-interface/#/managingscriptlifetime?id=method-acceptresources Api.AcceptResources(true) /////After everything is initialized may show body $("body").fadeIn() /////Events });Ну и кнопка HTML:
<button @click="Parse" class="ui labeled blue icon button"> <i class="play icon"></i> Start2 </button> <button @click="Stop" class="ui labeled red icon button"> <i class="pause icon"></i> Pause </button>Не получается прям никак сделать так, чтобы по кнопке запускало функцию, которая бы постоянно обновляла данные. Хочу потом еще стоп прикрутить, но это уже другая идея. Могу я Вас попросить показать где у меня здесь ошибка?
-
@Fox Добавил как Вы сказали в хуку "created" сохранение лога в значение, но не сохраняем (не меняет значение), подскажите почему?
var app = new Vue({ el: '#Main', data: { Log: [], Thread: null, ParseResult: "", Error: "" }, created() { Api.SetEventHandler(function(EventType, EventData) { /////Script started if (EventType == "start") {} /////Script stopped if (EventType == "stop") {} if (EventType == "log") { this.ParseResult = "123" ParseResult = "12345" console.log("1234") }; -
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox Добавил как Вы сказали в хуку "created" сохранение лога в значение, но не сохраняем (не меняет значение), подскажите почему?
Я же вам готовый код скидывал, в нём я получал текст лога из данных события
self.Log.push(EventData["text"]). А в вашем коде вы записали строку в переменную, почему она должна тогда меняться?Так же я выложил готовый код для получения результата из скрипта
отдельный вопрос на счёт участка кода:
Mounted() { setInterval(() => this.parseres(), 2000); },Зачем вы используете хук Mounted вообще? Я же скидывал статью по хукам:
В хуке mounted вы получите полный доступ к реактивному компоненту, шаблонам и отрисованному DOM (через this.$el). Mounted — самый популярный хук жизненного цикла. Обычно его используют для извлечения данных для компонента (вместо этого применяйте created) и изменения DOM, зачастую ради интегрирования не-Vue библиотек.
В методе setInterval вы используете анонимную функцию, использование ключевого слова this внутри функции будет обращаться не к vue, а к этой самой функции. Именно по этому я и переназначил конктекст
var self = this -
@Fox Спасибо за ответ! Я разобрался и вот рабочий код, который ловит логи функции и записывает в [[ParseResult]], которая уже в HTML выводится. Есть 2 кнопки Start, Pause которые запускают и останавливают функцию. Спасибо, Fox!
$(document).ready(function() { var app = new Vue({ el: '#Main', data() { return { Log: [], Thread: null, ParseResult: "", Error: "" } }, created() { let self = this Api.SetEventHandler(function(EventType, EventData) { if (EventType == "log") { console.log(EventData['text']) self.ParseResult = EventData["text"] }; }) }, methods: { Parse: async function() { ParseRun = Api.RunFunction("Parse", {}) }, Stop: async function() { if(ParseRun) ParseRun.stop() } } })Сейчас хочу разобраться, как мне из Log брать только значение переменной, которую я в лог передаю, без лишней информации, то есть получить: [713957403] [08:55:33] Поток №2 : 1.50 > 1.50
Как понял в документации нет возможности такой, я могу получать только весь текст, получается только регуляркой наверно выбирать нужный мне текст или все таки можно получить только данные лога без статистики (поток, время)?
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Как понял в документации нет возможности такой, я могу получать только весь текст, получается только регуляркой наверно выбирать нужный мне текст или все таки можно получить только данные лога без статистики (поток, время)?
Вы же получаете текст лога строкой, ни кто не мешает её парсить любым удобным способом.
На будущее, на странице интерфейса можно экспортировать и импортировать интерфейс

Вот экспортированный интерфейс, в котором данные из скрипта передаются через действие "результат":
CustomInterface.main.interface.20_08_2020_06_18.txt
скрипт 1005.xml -
@UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Jhon не вникал в вашу огромную дискуссию, но любые данные из бас можно через события пробрасывать в интерфейс. Можно переписать функцию лога чтобы она сама каждый раз это делала
Я об этом уже говорил:
Вы же получаете текст лога строкой, ни кто не мешает её парсить любым удобным способом.
-
@UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox или я тебя не понял или мы все таки о разном )
Возможно. Я говорю о том, что можно выводить в лог необходимые данные хоть в json и парсить получаемую строку в интерфейсе. А как создавать пользовательские события? Я ни разу не создавал
:D
Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ? -
@Fox said in Как в вебинтерфейсе выводить постоянно результат потока?:
Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ?
Примерно так

Только мне приходилось еще в интерфейсе небольшой костыль ставить, потомучто событие почему-то приходило часто по несколько раз одно и тоже. Вообщем событиям ставил ID из в интерфейсе запоминал id последнего события, если приходило событие с таким id то пропускать
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Правда непонятно про костыль, это надо что-то уже интерфейс переписывать, иначе будет повторные данные слать?
Ну покрайней мере так было, я уже давненько не работал с интерфейсом тк недолюбливаю верстку )))
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Получается в идеале можно написать новую функция как LOG в BAS, которая бы передавала данные в интерфейс, а там ее ловить? Может кто написал бы такой модуль для баса платно?
Зачем что-то платно писать. Просто создайте функцию в бас, а в ней код примерно как на скрне