Страница 1 из 6

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

Добавлено: Пт фев 22, 2013 6:37 pm
sergejey
в одной из тем я поднимал вопрос следующего плана:
я смотрю что часто возникает необхоимость вызывать какое-то действие при изменении свойства объекта. вот думаю, может сделать так, что б можно было задавать действие, которое всегда производится, когда что-то меняет свойство объекта.
в общем, в последних обновлениях реализовано:

Изображение

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

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

Добавлено: Пт фев 22, 2013 8:20 pm
Panchez
Вот это здорово! Спасибо.

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

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

код вызова:

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

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
У меня у одного такая проблема? Или бага общеизвестная?

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

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

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

Добавлено: Ср сен 25, 2013 11:51 am
ErmolenkoM
sergejey писал(а): чтобы не давать возможность зациклить вызов метода, связанного со свойством,
Могу предложить поискать имя вызываемого объекта в стеке вызовов. Вот только не знаю как это реализовывать.

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

Добавлено: Чт мар 05, 2015 8:52 pm
gans
А подскажите как сделать что бы при любом изменении конкретного свойства (например: tempVKotel.temp) выполнялся скрипт?

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

Добавлено: Пт мар 06, 2015 8:16 am
ErmolenkoM
gans писал(а):А подскажите как сделать что бы при любом изменении конкретного свойства (например: tempVKotel.temp) выполнялся скрипт?
Это свойство обязательно должно быть описано в классе. В описании свойства есть поле Запускать метод при изменении туда и прописать.
Почитать еще можно здесь http://smartliving.ru/Main/BasicsObjects , но именно этот момент там не описан.

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

Добавлено: Пн янв 25, 2016 8:38 pm
Kod.Begemot
Что-то у меня сломалось.
Есть свойство, которое меняется из другого метода командой "SetGlobal", со свойством связан метод. Так вот если я меняю свойство вручную - метод выполняется, если же свойство меняется командой "SetGlobal" - метод не исполняется.
В остальном система вроде бы работает, просто задумал новые функции добавить...

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

Добавлено: Ср авг 16, 2017 8:09 pm
Sergey2055
Всем привет. Господа подскажите плиз. Бьюсь уже не один день не могу понять как при вызове метода изменить свойство а потом если свойство по которому метод запускается если оно не менялось н-е время сбросить другое свойство я сделал так clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeOut("timer_live_timeout", "sg('alive',0);",60);
чет не пашет помогите плииииииз. точнее в 1 устанавливается а обратно нет по таймеру.

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

Добавлено: Ср авг 16, 2017 10:38 pm
olehs
setTimeout("timer_live_timeout", "sg('ИмяОбъекта.alive',0);",60);