Подскажите как удалить элемент UI

  • Автор темы Автор темы edron
  • Дата начала Дата начала

edron

Пользователь
3 Окт 2023
20
1
Проект
Кастомка с системой талантов
Вот так у меня выглядит js код для панорамы

JSX:
var dotaH = $.GetContextPanel().GetParent().GetParent().GetParent().GetParent()
GameEvents.Subscribe( "show_my_panel", ()=>dotaH.FindChildrenWithClassTraverse("stat-tooltip-root")[0].ToggleClass("show") );
GameEvents.Subscribe("test", addTalent);

function addTalent(event_data){
  var panel = $.CreatePanel('Panel', $('#Talents'), '');
  panel.BLoadLayoutSnippet("TalentSnippet");
  panel.FindChildTraverse('TalentTitle').text = "Уменьшение перезарядки способности на 2 секунды";
  var panel = $.CreatePanel('Panel', $('#Talents'), '');
  panel.BLoadLayoutSnippet("TalentSnippet");
  panel.FindChildTraverse('TalentTitle').text = "Теперь способность может накладывать эффекты от предметов и способностей";
  var panel = $.CreatePanel('Panel', $('#Talents'), '');
  panel.BLoadLayoutSnippet("TalentSnippet");
  panel.FindChildTraverse('TalentTitle').text = "Добавляет новую способность Fisting Knife";
  var panel = $.CreatePanel('Panel', $('#Talents'), '');
  panel.BLoadLayoutSnippet("TalentSnippet");
  panel.FindChildTraverse('TalentTitle').text = "Все враги умирают приблизившись на 100 метров к герою";
}


function onBtnTestClick(event){
    $.Msg("onBtnTestClick") // вывод в консоль
 
    var plyID = Game.GetLocalPlayerID(); // Game - глобальная штука, смотри API JS
    var test = Entities.GetAbilityByName( 228, "custom_phantom_strike" )
    $.Msg("1231313113 "+test);
    var data = {        // Обьект для передачи в Луа
      playerID: plyID,
      msg: event     // аргумен, который указывали в хмл onactivate="onBtnTestClick('myArgument')
    }
 
    // кладем                        "придуманное_имя_события" и наш обьект
    GameEvents.SendCustomGameEventToServer( "event_test", data);
    // dotaH.FindChildrenWithClassTraverse("stat-tooltip-root")[0].ToggleClass("show");
    $.Msg($('#Talents'));
    $('#TestId').DeleteAsync(0);
  }

Мне нужно удалять все panel из предыдущей функции по нажатию кнопки. Как это реализовать?
 
Можно более понятнее, что ты хочешь сделать
 
Можно более понятнее, что ты хочешь сделать
Вот у меня есть функция addTalent, в ней создаются элементы в панели. И мне нужно удалять все созданные элементы в функции onBtnTestClick
 
Не эксперт в области панорамы вот тебе ответ от ChatGPT

Чтобы удалить все созданные элементы в функции onBtnTestClick, вам нужно сохранить ссылки на созданные элементы в глобальной переменной или в переменной, доступной в обоих функциях. Затем вы можете использовать функцию RemoveAndDeleteChildren() для удаления всех дочерних элементов у родительского элемента.

Вот пример, как это может быть реализовано:


JavaScript:
var talentPanels = []; // массив для хранения ссылок на созданные элементы



function addTalent(event_data){

  // Создание панели с талантом и установка текста

  var panel = $.CreatePanel('Panel', $('#Talents'), '');

  panel.BLoadLayoutSnippet("TalentSnippet");

  panel.FindChildTraverse('TalentTitle').text = "Уменьшение перезарядки способности на 2 секунды";

 

  // Сохранение ссылки на созданную панель в массиве

  talentPanels.push(panel);



  // ... Добавление других панелей талантов и сохранение ссылок на них

 

}



function onBtnTestClick(event){

  // Удаление всех созданных панелей талантов

  for (var i = 0; i < talentPanels.length; i++) {

    talentPanels[i].DeleteAsync(0);

  }

  talentPanels = []; // Очистка массива ссылок на панели талантов



  // ... Другой код обработки клика кнопки

}


Таким образом, при каждом вызове функции addTalent созданный элемент будет добавляться в массив talentPanels. Затем в функции onBtnTestClick все элементы массива talentPanels удаляются с помощью DeleteAsync(0), и массив обновляется, становясь пустым.
 
Спасибо большое)
А то промучался целый день, а вариант намного легче оказался
 
Реклама: