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

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

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

    я так понимаю, где-то в этих ‘механизмах’ и сидит этот эффект ‘ЗАВТРА’
    когда мы вводим в экспортируемое свойство значение, а скрипты компонентов и даже фейсплейта это значение получает только завтра.

    #45102
    manjey73
    Участник

    с последовательностью непонятно, почему 1-й компонент последний вдруг ????

    ХА 3 раза, последовательность исполнения скриптов компонентов зависит не от их ID, а от расположения компонентов в дереве мнемосхемы 🙂

    #45106
    manjey73
    Участник

    Еще добавлю, при чтении через mainApi в domCreated запаздывание значений происходит вообще на 2 шага из-за всех этих механизмов.
    Может проще пропустить ошибку? вроде тогда один шаг теряем. Но лучше бы вообще не терять….. 🙁

    #45114
    manjey73
    Участник

    Видео между таблицей и схемой

    Можно на паузе проматывать посекундно. Проблема не столько в запаздывании отображения, сколько в том, что скрипт компонента ожидает одно, а получает другое.
    Как бы тут проблема, которую я не знаю как решить.

    В таблице || На схеме
    2.034 || 9.826
    4.425 || 0.517
    8.342 || 2.024
    6.278 || 4.425
    9.016 || 8.342
    6.921 || 6.278
    8.026 || 9.016

    И так далее. На 2 шага по факту.
    Это не через привязки, а используя MainApi, кроме Square и Time, через привязки так понимаю на шаг меньше получается, судя по опыту смены картинок и прочего.

    • Ответ изменён 2 недели, 1 день назад пользователем manjey73.
    #45116
    manjey73
    Участник
    Start Faceplate dataUpdated
    (5) [1, 1, 1, 1, 1]
    
    101,102,103,104,105
    Start domUpdated 2 Component
    ----------------------------------------------------------------
    (5) [{…}, {…}, {…}, {…}, {…}]
    0: {cnlNum: 101, val: -0.23151958422842756, stat: 1}
    1: {cnlNum: 102, val: 1, stat: 1}
    2: {cnlNum: 103, val: 2.2310920899999473, stat: 1}
    3: {cnlNum: 104, val: 0, stat: 0}
    4: {cnlNum: 105, val: 0, stat: 0}
    length: 5
    [[Prototype]]: Array(0)
    
    InCnlNum  101
    {cnlNum: 101, val: -0.23151958422842756, stat: 1}
    MyProp.Text = -0.232
    --------------------------------------------------
    Start domUpdated 4 Component
    Start domUpdated 6 Component
    Start domUpdated 8 Component
    Start domUpdated 10 Component
    Start Faceplate domUpdated
    (5) [{…}, {…}, {…}, {…}, {…}]
    0: {cnlNum: 101, val: -0.2333464179929472, stat: 1}
    1: {cnlNum: 102, val: 1, stat: 1}
    2: {cnlNum: 103, val: 2.2490282999999636, stat: 1}
    3: {cnlNum: 104, val: 0, stat: 0}
    4: {cnlNum: 105, val: 0, stat: 0}

    дальше идет повтор и уже не так интересно.

    Код внутри компонента, который пишет в .text свойства

    if(customData?.dtoData) { 
    console.log(customData?.dtoData);  // вывод в консоль ----------
    console.log("InCnlNum  " + myprop.inCnlNum);  // вывод в консоль ----------
                    
    const dataCnl = customData.dtoData.find(dto => dto.cnlNum === myprop.inCnlNum);
            
    console.log(dataCnl); // вывод в консоль ----------
           
    myprop.text = dataCnl.val.toFixed(3);
    console.log("MyProp.Text = " + myprop.text); } // вывод в консоль --------- 

    В логе выделил вывод в консоль между ——————-

    При этом мы имеем экспортируемое свойство со значением Val 1 — которое должно замениться собственно данными после чтения с Сервера.
    В консоли видно, что свойству присвоено значение -0.232 но увы, кто-то переписывает его на Val 1. То есть какой-то механизм после присвоения значения из данных опять пишет текст по умолчанию из экспортируемого свойства. 🙁

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

    Отсюда и танцы с бубнами, в попытках заменить текст экспортируемого свойства данными с сервера. При этом сохранить возможность скриптом сделать так, чтобы можно было не писать в него, а привязать физически через механизмы привязок.

    В общем не судьба похоже.

    #45119
    manjey73
    Участник

    Удалил привязку и данные пошли. От так от…

    как сделать, чтобы была возможность привязывать и так и так, и при этом не редактировать фейсплейт?

    #45120
    manjey73
    Участник

    Скрин лога

    скрин кода

    Но вот то, что вызывает у меня странность и непониние.
    По коду _getData вызывается только из dataUpdated фейсплейта.
    При этом одна строка лога НИКОГДА не печатается при выполнении самого dataUpdated.
    Эта строка выводится почему-то в domUpdated фейсплейта

    Почему? этот код не выполняется в domUpdated от слова вообще?

    вот код domUpdated фейсплейта.

        domUpdated(args) {
        console.log('Start Faceplate domUpdated');
        } 

    вот код dataUpdated фейсплейта

        dataUpdated(args) {
        console.log('Start Faceplate dataUpdated');
        this._getData(args);
        args.propertyChanged = true;
        }

    А по логу видно, что ничего в dto нет на первом цикле, все domUpdated компонентов пропускают ошибку за счет customDtata?.dtoData

    И тут возникает вопрос, нет данных, зачем выполнять domUpdated компонентов, если они зависят от данных?
    Почему domUpdated фейсплейта при этом получает данные и выводит их не обращаясь к коду, где собственно идет вывод?
    Он реально уже получил данные, или это некий принцип работы console.log ?
    В общем меня это в ступор вводит.

    #45122
    manjey73
    Участник

    Собственно вопрос:

    Как сложно поменять в коде последовательность выполнения кода фейсплейта и компонентов. Сделать domCreated и domUpdated фейсплейта первыми для теста ?

    хотелось бы попробовать протестировать в таком варианте. сильно сложно там что-то поменять в коде?

    #45123
    manjey73
    Участник

    имхо. Однозначно domCreated и domUpdated фейсплейта (Родителя) должен запускаться раньше, чем аналогичные функции компонентов.

    1. кто сказал, что customData должна быть и нужна везде?
    2. По мне так проще пользоваться Родительским customData, так как он создается в одном месте, а не в куче мест. Проще код, если нужно выполнить ряд математических или логических действий.
    3. в компонентах можно использовать customData родителя уже в domCreated, сейчас финт ушами и он расположен в domUpdated компонентов.
    4. Ну, это только проверка покажет, будет ли domUpdated родителя успевать получать данные после выполнения dataUpdated

    5. Если была причина сделать именно ‘сзади’ выполнение, то сделайте два, ‘спереду’ и ‘сзаду’ 🙂
    но впереди по мне удобнее.

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

    Как сложно поменять в коде последовательность выполнения кода фейсплейта и компонентов. Сделать domCreated и domUpdated фейсплейта первыми для теста ?

    Подобное изменение в продукте не планируется. Если хотите попробовать, измените локально.
    Добавить дополнительные обработчики в дополнение к существующим — это возможно в будущих версиях.

    #45126
    manjey73
    Участник

    Вот если бы я понимал как это сделать, то наверное и не спрашивал бы 🙂
    хоть локально, хоть глобально, я даже не понимаю, что вообще надо переставить и где 🙂

    Вот я еще чего не понимаю, ставлю на паузу и двигаюсь по шагам, и там, где по идее я должен видеть свои данные, я всегда вижу данные по каналам 101, 104 и 105.
    Хотя при выводе в консоль я вижу реальность, которую запрашиваю.

    Скрин Dev

    Ну и пытаясь ‘вылизать’ код в фейсплейте и компонентах понимаю, что Родитель должен запускать скрипты все же первым. А если была какая-то идея именно делать это последними, то надо разделить чтобы было domCreatedStep1 и domCreatedStep2 с возможностью указания, что именно надо в первом шаге выполнять, что в последнем.

    #45132
    manjey73
    Участник

    Подобное изменение в продукте не планируется. Если хотите попробовать, измените локально.
    Добавить дополнительные обработчики в дополнение к существующим — это возможно в будущих версиях.

    поменял локально 🙂 С точки зрения получения данных осталось все по прежнему. Запрос — Ожидание — Ответ = где-то уже на 10-м компоненте…
    как заставить компоненты не обновляться до получения данных пока не понял. При скользящем отображении не так важно наверное.

    Вот, если правильно понимаю, то Faceplate исполняется в конце, чтобы все компоненты расположились в DOM и иметь возможность ими манипулировать?
    Тогда надо будет добавить исполнение в начале дополнительные методы, чтобы можно было выставлять предварительные переменные для всех. Тогда domCreated компонентов смогут без танцев с бубнами их забирать и применять. Хотя мне кажется это не решит проблемы ‘светофоров’ при открытии схемы. Хотя если сделать при domCreated скрытый, невидимый может и так можно обыграть, если domUpdated не будет тянуть из исходника сразу в DOM для перерисовки.

    В общем пока возвращаю оригинал где исполнение в Конце.

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

    Faceplate исполняется в конце, чтобы все компоненты расположились в DOM и иметь возможность ими манипулировать?

    По аналогии с реализацией в .NET. Когда будет следующая итерация изменений в мнемосхемах, вернёмся к вопросу модели событий. Хотелось бы добиться того, чтобы изменять свойство фейсплейта и изменения сразу отображались в редакторе. Это сейчас работает для дочернего компонента Разметка, но не работает для других компонентов.

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