Ответы в темах
-
АвторСообщения
-
Boriss
УчастникСами ответили на свой вопрос.
args.component.parent.properties.uroven
Я сделал именно такBoriss
УчастникНо если честно, не знаю, возможно ли такое. Так как все экземпляры клонов должны управляться по разному.
Интересная мысль. Но как их потом разрулить и не запутаться?
Boriss
УчастникДвижек форума — ужос!
Boriss
УчастникТак поставьте {0} после id.
На примере Damper.fp
А «-» добавляется в этой строчке в скрипте компонента
const idPrefix = args.component.dom.attr("id") + "-1-";
Если надо {0} после id, то:const idPrefix = "-" + args.component.dom.attr("id") + "-1"; args.component.dom.find(<code>#damper${idPrefix}</code>).attr("transform", <code>rotate(${angle} 110 70)</code>)Примерно так, но возможны ошибки, пишу без проверки работоспособности.
Boriss
УчастникКак при установке двух одинаковых компонентов понять кто из них кто?
Заполнить поле «Наименование». Тогда к адресу ссылки автоматом добавляется имя компонента, например так: Наименование: compName1 ссылка: compName1.text
Именно так его можно найти в окне выбора свойств, когда делается экспорт свойств.
Наименования у компонентов должны быть уникальны.
За 15мин создал фейсплейт с двумя компонентами «текст» с привязкой к разным каналам. Работает. Но и сразу обнаружился косяк с привязкой к выходному каналу. Или так задумано? Номер выходного канала приходится указывать непосредственно в свойствах компонента, а не в разделе «разное», там этого просто нет или я еще не разобрался, как экспортировать выходной канал.Boriss
УчастникMikhail, спасибо. Будем ждать.
Однако вы ещё столкнетесь со ссылками на эти id, а не только с ними.
Тут главное получить id, дальше портянка скрипа.Ссылки на id никак не получить. Потому как всё, что внутри ExtraMarkup это значение ключа. Строковое. innerHTML: ‘<svg width=»100%» height=»100%» xml и т.д.
Единственный способ добраться до элемента dom, это метод перебора. Что-то вроде args.component.dom.find(‘#g2’).attr(‘transform’, transform); Другие способы я не нашел. Поэтому надо просто сделать id уникальными.
Но могу и ошибаться, программист из меня так себе…Boriss
УчастникНе работает уникальный id. Создам новую тему…
Boriss
УчастникСейчас вспомнил что с самого начала не работали скрипты у компонентов фейсплейта, т.е. я могу из главного окна найти дочерний компонент и его отредактировать, но не могу через скрипт этого компонента отредактировать его-же самого.
Мне удалось запустить скрипт компонента, который расположен внутри фейсплейта.
Методом научного тыка, как всегда… все это очень странно, но работает.
Что-бы заработал скрипт компонента, надо создать скрипт фейсплейта. Если нет скрипта фейсплейта, то скрипты в компонентах не работают.
Скрипт фейсплейта:class extends ComponentScript { domCreated(args) {} domUpdated(args) {} dataUpdated(args) {} }В скрипте компонента работают методы domCreated(args) и domUpdated(args). Метод dataUpdated(args) не работает. Вот такие «чудеса».
Boriss
УчастникНе стоит, я не со зла…
Boriss
УчастникМожет и проще. А какая разница? phenix769 попросил обходной путь. Путь указан. А как его идти, дело сугубо индивидуальное 😉
Покажите свой вариант.Boriss
УчастникТак будет правильнее. Убрал лишнее.
class extends ComponentScript { dataUpdated(args) { const props = args.component.properties; const cnlData = args.dataProvider.getCurData(props.inCnlNum); if (cnlData.d.val <= 25) { props.text = "Мир на 25%"; } else if (cnlData.d.val > 25 && cnlData.d.val <= 50) { props.text = "Мир на 50%"; } else if (cnlData.d.val > 50 && cnlData.d.val <= 75) { props.text = "Мир на 75%"; } else if (cnlData.d.val > 75 && cnlData.d.val <= 100) { props.text = "Мир на 100%"; } else if (cnlData.d.val == 200) { props.text = "Мир на 200%"; } else { props.text = "--"; } args.propertyChanged = true } }Boriss
УчастникМожно применить js скрипт к компоненту «Текст»
class extends ComponentScript { domCreated(args) { args.component.customData ??= {}; const customData = args.component.customData; } dataUpdated(args) { const customData = args.component.customData; const props = args.component.properties; const cnlData = args.dataProvider.getCurData(props.inCnlNum); if (cnlData.d.val <= 25) { props.text = "Мир на 25%"; } else if (cnlData.d.val > 25 && cnlData.d.val <= 50) { props.text = "Мир на 50%"; } else if (cnlData.d.val > 50 && cnlData.d.val <= 75) { props.text = "Мир на 75%"; } else if (cnlData.d.val > 75 && cnlData.d.val <= 100) { props.text = "Мир на 100%"; } else if (cnlData.d.val == 200) { props.text = "Мир на 200%"; } else { props.text = "--"; } args.propertyChanged = true } }Условия отредактируйте под свои задачи.
Boriss
Участникнет, не сделаю. ерунда всё это. фейсплейт кривой и с костылем. привязки не работают как должны работать. кстати, а как они должны работать? что куда экспортируется не понятно. экспротирую text, не работает. экспортирую blinking, не работает.
Boriss
УчастникУже писал ранее, что id элемента HTML или SVG доложен быть уникальным в рамках веб-страницы. Если данное правило не соблюдается, то нормально работать не будет.
И как его сделать уникальным, если это разметка в ExtraMarkup который в фейсплейте? id будет уникален при условии, что на мнемосхеме будет только один фейсплейт.
Весь день убил на то, что-бы сделать что-то подобное. За основу взял файлы manjey73.
Результат отрицательный.
На мнемосхеме два канала и панель. На панели два фейсплейта, привязанные к этим каналам. Вернее один и тот же, но в двух экземплярах. Скрипт фейсплейта меняет заливку и окантовку svg элемента. Т.е. меняет fill и stroke в разметке компонента ExtraMarkup. Если в канале 1, то расцветка одна, если 0, то другая. Расцветка меняется только от одного канала и сразу на двух фейсплейтах. На другой канал не реагирует.
Мнемосхема и фейсплейт https://disk.yandex.ru/d/JPlgER66dLXVHAБеру таймаут на неопределенное время. Терпение кончилось… Задача написать простейший скрипт превратилась в какую-то опупею… Писать скрипты внутри других скиптов, не понимая что и как работает и при отсутствии документации и методом научного тыка, такое себе занятие…
Boriss
УчастникВы могли бы в архив с фейсплейтом ещё добавить его изображение и txt-файл с кратким описанием, чтобы можно было сразу понять, что он делает?
Завтра сделаю
-
АвторСообщения