...

Помогите новичку начать.

Тема в разделе "Вопросы по платформе", создана пользователем 781330, 5 мар 2024.

  1. 781330

    781330 Участник

    Приветствую. Упёрся в скриптах. В примерах Context.data.tablica_test.length выводит размер таблицы на форме.
    А у меня, хоть убей выдаёт ошибку. При этом объект Context.data.tablica_test вполне себе объект.
    См Скрины.
    Спасибо.

    Вложения:

  2. maxim.kol

    maxim.kol Новичок

    Можно написать через вопрос
    Context.data.tablica_test?.length
    должно работать
    Можно сначала проверить что tablica_test не undefined, тогда ошибка тоже уйдет

    Код:
    
    if(Context.data.tablica_test){
    //вот тут можно работать с length, typescript уже уверен, что tablica_test не undefined
    }
  3. 781330

    781330 Участник

    Спасибо большое. Но у меня из головы выпадает логика. Почему скрипт считает таблицу tablica_test неопределённой, если она присутствует в контексте формы? Другими словами, если не производить проверку на undefined, то что - тогда надо в скрипте как-то явно её объявить? Вроде как она уже есть в контексте Context.data.
    Да и вообще, скрипит не ругается на объект tablica_test. Он ругается на его свойство length. Мол, оно не определено. Просто ради того, чтобы лучше понимать логику TS - получается, что можно где то в скрипте насильно объявить, что у tablica_test есть length?
  4. maxim.kol

    maxim.kol Новичок

    Typescript как язык пытается защитить вас от ошибок, хотя в данном случае он немного перестарался)
    То, что переменная присутствует в контексте, обычно не гарантирует, что в ней лежат данные. Если вы ничего туда не положили, то там будет undefined. Так работает для многих типов, например для строк, чисел.
    В целом, если переменная имеет значение undefined, а вы попробуете взять length от undefined, скрипт упадет. От этого вас и защищает предупреждение об ошибке. Но конкретно с таблицей typescript перестарался, это массив и по умолчанию он уже не undefined.

    Нет, посмотрите еще раз на ваш скриншот) Красным подчеркнуто именно tablica_test, а не length
  5. 781330

    781330 Участник

    Храни Вас Бог, Maxim.kol !
    Позвольте ещё базовый вопрос: как читать подобные подсказки (скрины). Вот именно прям до символа - как их читать?
    [​IMG]
    - это константа Context, у которой тип Item? Что за тип такой? Что дальше в острых скобках? Что такое $$ ?
    Дальше - больше:
    [​IMG]
    BaseItem, Based? Это что за типы терминов? Это системные объекты? Они где-то в справочнике платформы есть?\
    И на закуску:
    [​IMG] Это дочернее свойство "tablica_test". Почему в конце вопрос? По тому, что оно может иметь значение undefined? После двоеточия его тип? Почему в острых скобках два параметра через запятую? Что разделяют знаки доллара? После прямой черты - текущее состояние undefined?

    Буду признателен за любые комментарии. Необходимо мне вникнуть в основы - дальше легче будет.
  6. maxim.kol

    maxim.kol Новичок

    Ну наверное есть смысл почитать справку элмы по typescript SDK и на досуге документацию по typescript
    Вы примерно во всем правы, только | undefined это не текущее состояние, а один из возможных типов свойства
    Последнее редактирование: 6 мар 2024
  7. 781330

    781330 Участник

    Подскажите. Почему setTimeout не срабатывает? "Это как-то связано с асинхронностью функции?:
    Код:
    
    async function add_string(): Promise<void> {

    setTimeout(() => console.log("World3!"), 2000 )

    }

    Вложения:

  8. maxim.kol

    maxim.kol Новичок

    Предлагаю писать вопросы в телеграм чат комьюнити)
  9. lagutkina

    lagutkina Техническая поддержка

    Используйте setTimeout через объект window, задекларировав перед этим как declare const window:any;
    Пример использования:

    Код:
    
    window.setTimeout(()=>{console.log("World3!")},2000)
    
    
  10. 781330

    781330 Участник

    Благодарю всех небезучастных! Это очень увлекательно - TypeScript, дженерики, операторы типов и прочие промисы:)
    Вопрос - откуда вот эти ошибки сыплются (скрин). Я на них пока внимания не обращаю, но вообще - интересно.[​IMG]
  11. lagutkina

    lagutkina Техническая поддержка

    Система совершает множество различных запросов ежедневно и пока они не влияют на работоспособность системы, можно не беспокоиться.
  12. 781330

    781330 Участник

    Здравствуйте. В TS скриптах метод промисов .finaly не работает?
    Говорит - библиотеки нет такой
    [​IMG]
  13. lagutkina

    lagutkina Техническая поддержка

    К сожалению, в tssdk не описан данный метод. Это означает, что его использование не поддерживается в системе.
  14. 781330

    781330 Участник

    Далее. Занимаюсь практическим занятием вот от сюда https://elma.ispringlearn.ru/content/info/311?vc_cik=10169631-bnXnM-Ld4QR-wQytq&vc_lpid=311
    При создании приложения у меня всегда существует в контексте ключевое поле "__name", которое невозможно удалить. (скрин)
    [​IMG]
    Если сравнивать с готовым кодом примера (скрин 2 ), то там в приложении нет этого поля. Как это сделано? Спасибо.
    [​IMG]
  15. zhigalova

    zhigalova Участник

    Добрый день! Переменная _name - является системным полем. Системные поля — свойства, добавленные в приложение по умолчанию. Это поля, присутствующие в любом созданном в ELMA365 приложении: Идентификатор, Дата создания, Автор, Дата изменения, Редактор, Дата удаления, Название.
    Системные поля нельзя удалить. Их можно использовать например в скриптах или при поиске по параметрам.
    В примере представлены пользовательские поля, которые уже можно создать самостоятельно по мере необходимости.
  16. 781330

    781330 Участник

    Непоняяяятно. Противоречия между двумя абзацами. В примере - то системных полей нет! Как?
  17. zhigalova

    zhigalova Участник

    Добрый день! Для того чтобы Переменная _name не отображалась в контексте Вы можете формировать название элемента по шаблону, без использования ключевой переменной. Для этого перейдите в настройку приложения(шестеренка), Название элемента, по шаблону.