0
Beantwoord
Как получить ссылку на кнопку в списке?
Oleg Bubnov 8 jaar geleden
in iRidium Script
•
bijgewerkt door Aleksandr Romanov (CTO) 8 jaar geleden •
4
Создаю список методом IR.ITEM_LISTBOX, заполняю его кнопками - выключателями релюх на AMX. Мне нужно при создании списка проверить какие реле включены и включить кнопки в списке. Как это правильно сделать? Я пытался изменять свойство Value у создаваемых кнопок (по аналогии с Text и Image), но генерируется ошибка. А как создать и поставить ссылку на кнопку в глобальный слушатель, не могу понять. Помогите, пожалуйста. Вот мой код:
var testPopup = "Баня";
var Switches = ["Вход","Душ","Пещера Потолок","Купель Патио","Купель Щит и Люстра","Батареи и Потолок","Пещера Люстра"];
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
IR.Log("Global Listener Activated: " + name + "\tValue: " + value);
//Как получить сюда ссылку на кнопку из списка и присвоить ее полю Value значение Value слушателя?
});
// оформляем подписку на изменения каналов драйвера
for (var i = 0; i < Switches.length; i++) {
IR.SubscribeTagChange("Drivers.amx."+Switches[i]);
};
IR.AddListener(IR.EVENT_START,0,function()
{
MakePanelID();
InitController();
NewPopup (testPopup);
IR.ShowPopup(testPopup)
// Создаем список и заполняем его
IR.GetItem(testPopup).CreateItem(IR.ITEM_LISTBOX,"Выключатели",0,0,750,1344);
test_list = IR.GetItem(testPopup).GetItem("Выключатели");
test_list.Template = "Шаблон Списка Выключателей";
for (var i = 0; i < Switches.length; i++) {
// или как здесь получить и указать значение GetFeedback из канала, соответствующего кнопке
test_list.CreateItem(i, 1,{Text: Switches[i]});
};
//При изменении выключателя, включаем или выключаем кнопку в AMX
IR.AddListener(IR.EVENT_LIST_ITEM_CHANGE, test_list, function(Item, Subitem, TypeEvent, object){
var tempnum = TypeEvent;
if(tempnum==12) {
amx.Set(Switches[Item],1);
amx.Set(Switches[Item],0);
Log(amx.GetFeedback(Switches[Item]));
object.Value = !amx.GetFeedback(Switches[Item]);
};
});
});
Customer support service by UserEcho
Здравствуйте!
Для того чтобы записать какое -либо значение в определенный элемент на листе необходимо использовать такой же синтаксис как и при создании элемента.
Т.е.
И если элемент уже создан, то указанный метод просто поменяет значение указанного параметра элемента.
Попробуйте использовать такой скрипт
В итоге заработал несколько видоизмененный скрипт. Переменная i в глобальном слушателе в Вашем варианте всегда равна длине массива. Я добавил к названиям кнопок номера и потом вычленял их. Решение работает, но несколько туповатое. Нет ли более изящного варианта? Вот итоговый скрипт:
Я использую "глобальный" массив типа
В глобальном слушателе идет проверка
Элементами массива являются ссылки на объекты с необходимыми функциями
инициализация вида
В вашем примере для массива наверно можно использовать индексы Item, Subitem