вызов метода при изменении свойства объекта

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

вызов метода при изменении свойства объекта

Сообщение sergejey » Пт фев 22, 2013 6:37 pm

в одной из тем я поднимал вопрос следующего плана:
я смотрю что часто возникает необхоимость вызывать какое-то действие при изменении свойства объекта. вот думаю, может сделать так, что б можно было задавать действие, которое всегда производится, когда что-то меняет свойство объекта.
в общем, в последних обновлениях реализовано:

Изображение

можно задать имя метода, который будет вызван всегда, если кем-то или чем-то обновляется свойство объекта. по большому счёту, это нововведение избавляет от необходимости отдельного вызова метода, если после изменения свойства нужно было провести какие-то действия (к примеру, в другом свойстве установить дату последнего обновления)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Panchez
Сообщения: 99
Зарегистрирован: Вс апр 29, 2012 7:31 pm
Благодарил (а): 0
Поблагодарили: 0

Re: вызов метода при изменении свойства объекта

Сообщение Panchez » Пт фев 22, 2013 8:20 pm

Вот это здорово! Спасибо.
С уважением
Александр.
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: вызов метода при изменении свойства объекта

Сообщение ErmolenkoM » Ср сен 25, 2013 9:04 am

Использую данный способ. Столкнулся с проблемой - если в одном методе менять свойство подряд несколько раз - то значение свойства меняется, а связанный метод вызывается через раз. То есть:

код вызова:

Код: Выделить всё

sg("Radio.RadioVolume",10);
say("Значение громкости: ".gg("Radio.RadioVolume"));
sg("Radio.RadioVolume",11);
say("Значение громкости: ".gg("Radio.RadioVolume"));
sg("Radio.RadioVolume",12);
say("Значение громкости: ".gg("Radio.RadioVolume"));
код связанного со свойством RadioVolume метода:

Код: Выделить всё

say("Громкость ".gg("Radio.RadioVolume"));
чат:

Код: Выделить всё

Громкость 10
Значение громкости: 10
Значение громкости: 11
Громкость 12
Значение громкости: 12
т.е. четный вызов метода не отработал.

в качестве костыля я устанавливаю свойство 2 раза:

код вызова:

Код: Выделить всё

sg("Radio.RadioVolume",10);
sg("Radio.RadioVolume",10);
say("Значение громкости: ".gg("Radio.RadioVolume"));
sg("Radio.RadioVolume",11);
sg("Radio.RadioVolume",11);
say("Значение громкости: ".gg("Radio.RadioVolume"));
sg("Radio.RadioVolume",12);
sg("Radio.RadioVolume",12);
say("Значение громкости: ".gg("Radio.RadioVolume"));
при этом вывод правильный:

чат:

Код: Выделить всё

Громкость 10
Значение громкости: 10
Громкость 11
Значение громкости: 11
Громкость 12
Значение громкости: 12
У меня у одного такая проблема? Или бага общеизвестная?
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: вызов метода при изменении свойства объекта

Сообщение sergejey » Ср сен 25, 2013 11:19 am

msh555 писал(а):У меня у одного такая проблема? Или бага общеизвестная?
Насчёт общеизвестности не уверен, но причину знаю. В коде есть "костыль", который ждёт своей очереди на переделку. Суть его в том, чтобы не давать возможность зациклить вызов метода, связанного со свойством, если в этом методе тоже самое свойство обновляется. Побочный деффект -- если в одном блоке кода несколько раз обновляется свойство, то метод вызывается через раз, как описано выше. Подниму эту проблему повыше в своём списке и подумаю как решить её по-лучше.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: вызов метода при изменении свойства объекта

Сообщение ErmolenkoM » Ср сен 25, 2013 11:51 am

sergejey писал(а): чтобы не давать возможность зациклить вызов метода, связанного со свойством,
Могу предложить поискать имя вызываемого объекта в стеке вызовов. Вот только не знаю как это реализовывать.
aka msh555
Cubian на Cubietruck, Connect
gans
Сообщения: 37
Зарегистрирован: Вс янв 06, 2013 2:57 pm
Благодарил (а): 15 раз
Поблагодарили: 3 раза

Re: вызов метода при изменении свойства объекта

Сообщение gans » Чт мар 05, 2015 8:52 pm

А подскажите как сделать что бы при любом изменении конкретного свойства (например: tempVKotel.temp) выполнялся скрипт?
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: вызов метода при изменении свойства объекта

Сообщение ErmolenkoM » Пт мар 06, 2015 8:16 am

gans писал(а):А подскажите как сделать что бы при любом изменении конкретного свойства (например: tempVKotel.temp) выполнялся скрипт?
Это свойство обязательно должно быть описано в классе. В описании свойства есть поле Запускать метод при изменении туда и прописать.
Почитать еще можно здесь http://smartliving.ru/Main/BasicsObjects , но именно этот момент там не описан.
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: вызов метода при изменении свойства объекта

Сообщение Kod.Begemot » Пн янв 25, 2016 8:38 pm

Что-то у меня сломалось.
Есть свойство, которое меняется из другого метода командой "SetGlobal", со свойством связан метод. Так вот если я меняю свойство вручную - метод выполняется, если же свойство меняется командой "SetGlobal" - метод не исполняется.
В остальном система вроде бы работает, просто задумал новые функции добавить...
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: вызов метода при изменении свойства объекта

Сообщение Sergey2055 » Ср авг 16, 2017 8:09 pm

Всем привет. Господа подскажите плиз. Бьюсь уже не один день не могу понять как при вызове метода изменить свойство а потом если свойство по которому метод запускается если оно не менялось н-е время сбросить другое свойство я сделал так clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeOut("timer_live_timeout", "sg('alive',0);",60);
чет не пашет помогите плииииииз. точнее в 1 устанавливается а обратно нет по таймеру.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: вызов метода при изменении свойства объекта

Сообщение olehs » Ср авг 16, 2017 10:38 pm

setTimeout("timer_live_timeout", "sg('ИмяОбъекта.alive',0);",60);
За это сообщение автора olehs поблагодарил:
Sergey2055 (Чт авг 17, 2017 8:12 am)
Рейтинг: 1.16%
Ответить