Проброс команд во внутренний компонент

Стартовая страница › Форумы › Понять, как работает ПО › Мнемосхемы › Проброс команд во внутренний компонент

Просмотр 15 сообщений - с 16 по 30 (из 44 всего)
  • Автор
    Записи
  • #44956
    manjey73
    Участник

    Посмотрите через инструменты браузера в объекте компонента подобъект привязок (bindings). Там должны быть номера каналов. Компонентом является экземпляр фейсплейта. Если не увидите, я посмотрю точнее.

    И если можно, со скриншотами и описанием последовательности действий.
    Я перерыл все, что только можно в окнах по F12 (Посмотреть код элемента)

    Даже намека не нашел на bindings

    #45066
    manjey73
    Участник

    очень актуально, как получить номера каналов?

    в идеале вариации — сразу массив всех привязанных каналов фейсплейта (хотя пока не знаю зачем, если надо определять что кому принадлежит?) например из кода самого фейсплейта.

    Номер канала привязки с каким-то пониманием через что привязан, через объект или через устройство?
    Желательно из кода скрипта самого компонента.

    #45067
    manjey73
    Участник

    Кнопка и положение — скрин

    Вот пример с кнопкой, в скрипте, который вызывается как из domCreated, так и из domUpdated должно поменяться положение кнопки туда, куда я ее задам через экспортируемое свойство или скриптом (имеется ввиду не явное задание положение через y самого компонента, а именно через настройки другой переменной или по совокупности других переменных скриптом).

    Так вот domCreated не исполняет этого действия. Но если заставить фейсплейт обновляться костылями, так как без принудительного обновления не срабатывает domUpdated, то кнопка сменит свое положение. Это видно по правому фейсплейту с табличкой. Там по умолчанию 5 строк + заголовок, за счет изменения размера и отключаю видимость ненужной мне строки, меняю основной цвет текста, шрифты и так далее. И вот все эти смены свойств компонентов НЕ РАБОТАЮТ в domCreated, как бы я ни старался.

    #45068
    manjey73
    Участник

    Пример кнопки 2

    И вот пример, когда я принудительно заставил исполняться domUpdated. Кнопка поменяла свое положение (в свойствах стоит значение 80 для Y кнопки)

    А так же сделал копию таблички и отключил в свойствах заголовок, не меняя размера, и туда уже 5 строк влезло.

    При этом тут не используется НИГДЕ dataUpdated, потому что он тут нафик не нужен.

    #45079
    manjey73
    Участник

    Порядок выполнения ??? скрин

    Попробую пояснить скрин.
    domCreated 1-ого компонента почему-то последний ? Проверил, его id=1
    Добавил лог ко всем остальным компонентам и получил тот же результат
    Порядок такой 2,3,4,5,6,7,8,9,10,11,1 — ПОЧЕМУ он последний, а не первый ? 🙂

    Далее Faceplate domCreated — ожидаемо
    Далее Faceplate dataUpdated — тоже ожидаемо (вроде бы) НО, dataUpdated пишет в customData данные, полученные от сервера.
    Далее выполняются domUpdated компонентов по очереди 2, 4, 6, 8, 10 (2 закоментировано, по этому на скрине не видно) и пытаются читать из customData РОДИТЕЛЬСКОГО объекта, то есть фейсплейта, НО ТАМ НИЧЕГО НЕТ, потому что данные там появятся, когда отработает Faceplate domUpdated
    И только на следующем круге у нас domUpdated компонентов сможет получить данные из customData родительского объекта и вот тут они ВЧЕРАШНИЕ 🙂

    з.ы. не кидайте в меня камни и не говорите куда идти смотреть код и ход выполнения, я по старинке, расставляя console.log, потому что другого способа отслеживать пока не нашел 🙂 ну или не умею….

    В общем прикольно. dataUpdated может быть только у фейсплейта, ибо типа нефик в компонентах?
    Ну а данные мы всегда в таком случае получаем ‘вчерашние’ из-за того, что они записываются не dataUpdated а domUpdated фейсплейта, который выполняется после всех domUpdated компонентов.

    Как быть в данном случае? какие костыли делать?

    #45084
    Mikhail
    Модератор

    Даже намека не нашел на bindings

    Нужно искать не в DOM-модели документа, а в JavaScript-объектах. В скрипте компонента сделайте console.log(args) и в консоле браузера можно будет раскрыть всю структуру объектов, которые доступны.

    #45085
    Mikhail
    Модератор

    Алгоритм обновления данных можно пройти по шагам, начиная с этого места.

    #45087
    manjey73
    Участник

    ну в качестве костыля, чтобы ошибка не светилась я ввел так

    const customData = args.component.parent.customData; // Родительский customData
    if(customData.dtoData?.length > 0) {

    то есть добавил ? — но это не отменяет вчерашних данных 🙁

    #45090
    manjey73
    Участник

    в общем я могу прочитать массивом несколько переменных с Сервера, но сейчас проверил, не учел, что Сервер возвращает массив после сортировки. Специально последовательность каналов прописал по другому.

    но это так понимаю мелочи.

    Но вот как-то получать или преобразовывать в вариант отображаемого вида было бы полезно скриптами системы. Потому что только система знает, как их надо отобразить.

    И получать массив номеров каналов передавая кому-то коды тегов, если у нас привязка будет через объект или устройство было бы полезно, если нет такого же механизма для чтения с Сервера.

    • Ответ изменён 2 недели, 1 день назад пользователем manjey73.
    #45092
    manjey73
    Участник

    Может сейчас будет проще поменять последовательность выполнения domCreated и domUpdated скрипта фейсплейта и сделать их ПЕРВЫМИ ?

    с точки зрения будут там подготовительные скрипты для выполнения остальных или завершающие, да какая разница?
    а вот то, что данные куда-то там попадут раньше после dataUpdated фесплейта будет лучше.

    И не надо разделять на части, типа domUpdatedFirst и domUpdatedLast, типа до скриптов компонентов и после.

    #45096
    manjey73
    Участник

    Порядок выполнения 1 (скрин)

    Попробовал полученный массив с данными каналов в dataUpdated положить сразу в customData компонента, который оттуда их должен взять. И опять ошибка на первом шаге.

    В общем пока не отработает domUpdated скрипта самого фейсплейта, данных нигде нет.

    Почему собственно? разве dataUpdated не имеет прямого доступа к customData ?
    Где-то промежуточно хранит, пока их не перенесет именно domUpdated скрипта фейсплейта?

    Вот эту штуку почините/поправьте/измените пожалуйста. Потому что я не знаю, как это обойти, кроме просто указания пропустить ошибку.

    Либо dataUpdated должен сразу закидывать полученные данные в customData, либо domUpdated фейсплейта должен отработать раньше всех и перенести данные уже фактически в customData, чтобы остальные оттуда могли их забирать.
    Может действительно сделать ДВА скрипта (domCreated, domUpdated) для главного скрипта фейсплейта, появится больше гибкости. Ну и то, что прочитал dataUpdated должен выполнить первый скрипт фейсплейта domUpdated_1 условно.

    #45097
    manjey73
    Участник

    с последовательностью непонятно, почему 1-й компонент последний вдруг ????
    на сортировку не похоже, тогда было бы 1,10,11,2,3 и так далее вроде.

    #45098
    manjey73
    Участник

    Все равно ошибка (скрин)

    Я уже перенес в domUpdated скрипта фейсплета, и все равно получаю ту же ошибку.
    На первом цикле, после получения данных от сервера. Но массив с данными вот же он, тут же…

    Почему customData пустое на первом цикле даже в domUpdated скрипта фейсплейта??????

    #45099
    manjey73
    Участник

    блин, new MainApi это типа асинхронный метод?

    Получается мы всегда будем получать вчерашние данные?

    #45100
    manjey73
    Участник

    ха, оказывается можно делать запросы к Серверу даже не из dataUpdated я прямо из domCreated и потом из domUpdated 🙂

    непонятно, нафига тогда вообще dataUpdated нужен, если из-за применения скрипта в нем происходит ‘ВЧЕРА’ ?

Просмотр 15 сообщений - с 16 по 30 (из 44 всего)
  • Для ответа в этой теме необходимо авторизоваться.