![]() |
Как к переменной подписать слушателя?
Как к переменной подписать слушателя?
Чтоб при ее изменении в зависимости от значения выполнялась нужная мне функция. Т.е изменилась переменная и сразу срабатывает событие и выполняется соответствующий код... Подскажите где копать или лучше пример наглядный с комментами. Смотрел что есть нечто подобное в Хелпе - зовется watch(), но ничего так и не понял. |
Создаеш обьект. В нем задаеш параметр например obj.n = 0.
Вешаеш на него watch, Код:
obj.watch('n', func, 0);Пишеш функцию Код:
function func(arg1, arg2, arg3, arg4){};- arg2 будет предидуше значение obj.n - arg3 будет новое значение obj.n - arg4 третий аргумент из watch |
Делай вызов функции в том месте кода, где изменяешь переменную...
|
to marat_sa:
Не всегда удобно вызывать функцию где изменяется переменная... Например есть модальное окно, в зависимости от возвращаемого результата мне нужно вызвать определенную функцию, как дождаться изменения переменной и в том же месте вызвать нужную функцию? to qazwsx: Спасибо, уже немного понятней... Вот только еще момент - arg1 будет n и - arg3 будет новое значение obj.n т.е они равны? зачем два одинаковых параметра? или arg1 это имя переменной? |
неужели так трудно прочитать про watch в русском хелпе?
|
Цитата:
Если нечего добавить по теме, то лучше вообще ничего не писАть! Вопрос же не ставился конкретно по watch... это как возможный вариант, и спасибо qazwsx что доступно разжевал именно этот метод... Может вообще на форуме создать правило - типа "то что есть в хелпе и Гугле даже не пытаться спрашивать - иначе растрел!" |
А про callback кто спрашивал?
Цитата:
|
to chingachgoog:
при всем уважении, но спрашивал то я не у Вас... :) или Вы в секретарях числитесь у qazwsx?... в следующий раз буду знать, чтоб к нему обратиться я это через Вас буду делать. Если кроме watch больше способов нет отследить изменение переменной, то всем спасибо, уже разобрался - вопрос можно считать закрытым. |
Mur4ik, извините, я вовсе не думал вас не только поучать, но и даже вообще как-то осуждать. Мой вопрос был более исследовательский: в данном вопросе русский хелп настолько запутан?
|
Привет!
Тоже как-то давно разбирался с watch. Вот выдержка из хэлпа: "Метод; регистрирует обработчик события, вызываемый в случае, когда свойство объекта изменяется" В приведеном коде в последней строке значение просто переприсвоино, но watch срабатывает. Код:
var myObject:Object = new Object(); |
to chingachgoog:
извинения не принимаются :), т.к не за что тут извиняться к русскому хелпу я все же обратился, спасибо to Жень Шень: спасибо, хелп я уже изучил по вопросу watch P.S. Я так понял что в данном методе немаловажно вернуть функцией callback значение отслеживаемой переменной иначе ей присвоится значение "undefined". Всем спасибо... |
to Mur4ik
Нет, я не в смысле "подсказать", а как бы продолжить ваш разговор про watch. Ситация: какой-нить объект отработал свой код и вернул значение. А оно оказалось равным прежнему. А watch все равно срабатывает! То есть надо еще сверить с предыдущим значением, чтоб не вызывать функцию вхолостую. Но, сдругой стороны этот, скажем казус, оказался мне на руку, когда надо было запускать функции из внешней оболочки - я просто переприсваивал переменной тоже значения и watch делал свое дело! |
Спасибо, учту...
Так этот wanch срабатывает всякий раз при изменении переменной или все таки при присваивании ей какого либо значения... в Хелпе написано: "callback Функция, вызываемая, когда отслеживаемое свойство изменяется.", т.е как в данном случае понимать слово "изменяется"? |
Как вариант, если просто для переменной, - написать свой getter-setter.
|
Я не сразу понял что такое watch, пока не сделал так
Код AS1/AS2:
|
Привет!
А мне кажется, что правильней писать так: Код AS1/AS2:
1. watch - метод объекта. А у вас не понятно к какому объекту он относится. Отсюда: 2. Метод не подсвечивается при написании (возможно это для вас несущественно), а значит не проверяется синтаксис АС. И: 3. У вас не будет работать метод unwatch. А он может быть полезен, если надо прекратить отслеживание |
Цитата:
|
вроде никто про методы get/set не упоминал
Код AS1/AS2:
|
Цитата:
|
Цитата:
Код:
test = true;Но, помоему, в большом коде и с несколькими watch можно запутаться. Короче, на любителя... все это... |
Цитата:
Код:
включили |
А не проще сделать класс, для программы и для переменной написать сеттер метод и через него запускать нужную функцию?
|
2 faust.d503
watch прекрасно справляется с задачей. Повторюсь только в том, что он срабатывает не только при изменении переменной, но и при простом переприсвоении. |
Не знаю, у меня без разницы с this или без:
Код:
BoolWatcher = function (prop, oldVal, newVal) {включили выключили и если закоментировать unwatch ("test"), то трейсит: включили выключили включили выключили Можно добавлять/убирать this в любых комбинациях - ничего не меняеется: Код:
watch("test", BoolWatcher)Код:
this.watch("test", BoolWatcher)Код:
watch("test", BoolWatcher)Код:
this.watch("test", BoolWatcher) |
chingachgoog, ссори!
Была ошибка у меня в коде ... в буквочке. Не доглядел. Действительно по барабану с "дзыс" или без него... Но, для чего Адобэ сделала атоматическое добавление this, мне не понятно :( |
| Часовой пояс GMT +4, время: 17:04. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.