![]() |
Как отследить изменение переменной внутри класса
Есть мувиклип с описанием класса:
#initclip TGrid.prototype = new MovieClip(); function TGrid() { trace("constructor"); } TGrid.prototype.recordSet = []; TGrid.prototype.Draw = function() { trace(this.recordSet); } #endinitclip Теперь приаттачиваю его на основную сцену: this.attachMovie("TGrid", "Grid", 1); var recordSet = []; recordSet[0] = 0; recordSet[1] = 1; Grid.recordSet = recordSet; и хочу, чтобы после присвоения Grid.recordSet нового значения сразу вызвалась внутрення функция Grid.Draw(). Подсажите, пожалуйста, как внутри класса прописать что-то типа TGrid.watch("recordSet", this.Draw); Или мне нужно заводиться с механизмом создания собственного события типа: TGrid.prototype.onEnterFrame = fucntion() { if (this.recordSet.length > 0) this.Draw(); } ну и т.д. по тексту? Merci beaucoup! |
Напиши функцию-сеттер для присвоения Grid.recordSet нового значения и вызывай в ней Draw().
|
Если вроде этого
TGrid.prototype.SetRecordSet = function(recordSet) { this.recordSet = recordSet; this.Draw(); } а потом Grid1.SetRecordSet(recordSet); - то не очень бы хотелось. По-моему, как-то коряво получается. |
См. help на Object.addProperty
|
Спасибо. Посмотрел. Что-то в этом есть. Пойду попробую приделать ЭТО к классу :) .
|
Не знаю, но почему-то не работает.
Сделал так #initclip TGrid.prototype = new MovieClip(); function TGrid() { trace("constructor"); } TGrid.prototype.addProperty("recordSet", null, TGrid.prototype.SetRecordSet); TGrid.prototype.SetRecordSet = function(rs) { this.recordSet = rs; this.Draw(); } TGrid.prototype.Draw = function() { trace(this.recordSet); } #endinitclip А в первом кадре так: this.attachMovie("TGrid", "Grid", 1); var recordSet = []; recordSet[0] = 0; recordSet[1] = 1; Grid.recordSet = recordSet; ....и ничего... :( Чувствую, что пока знаний не хватает, прийдется Grid.Draw() вручную вызывать :p |
Переходи на actionscript 2.0
Код:
class cSomeClass{ |
не обязательно под семёрку переделывать.
просто глупостей писать не надо :) Lego, объясни пожалуйста, почему ты СНАЧАЛА создаёшь прототип функции, а только потом создаёшь саму функцию? :)) это во-первых. во-вторых - почему ты СНАЧАЛА создаёшь сеттер, передаёшь ему сетовую функцию, а только потом эту сетовую функцию создаёшь? :) что за чудеса? :) в-третих: всегда можно протрейсить результат выполнения функции addProperty. если возвратилось false - то выполнения сеттера ждать бесполезно: свойство просто не было создано. а не создаётся оно потому, что ты передаёшь ему сеттер, но не передаёшь геттер :)) read only свойства я еще видел, а вот write only - это что-то дзен-буддистское :)) и в-самых-последних: зачем вся эта заморочка с классом и инитклипом, если ты не регистрируешь класс при помощи Object.registerClass? итого: Код:
#initclip |
По поводу первого - в целом, согласен, но не вижу принципиальной ошибки - ведь работает в обоих случаях.
По поводу второго - я же могу, допустим, написать так f = pi_2(); function pi_2() { return Math.Pi()/2; } ? Ведь работает. Третье, пропущу - лопухнулся. А про последнее ВООБЩЕ не понял. Но все равно спасибо. |
Цитата:
это связано со следующим вопросом: Цитата:
function name (args) { .. } то её объявление перемещается при компиляции на самый верх. как будто ты написал это в первых строчках скрипта. т.е. это происходит даже без твоего ведома. а вот если ты создаёшь функцию так: name = function () { .. }; то там где написал объявление - там оно и будет. только благодаря этой особенности компилятора флэша у тебя что-то работало. но логика-то при этом принципиально не правильная... собственно это меня и восхитило :) всё задом-наперёд :) а то что оно почему-то работает даже при неправильно логически построенном скрипте - это не показатель. работает - замечательно. но я бы посоветовал писать код сверху вниз и слева направо, а не как-нибудь еще :)) попробуй сначала налить чай, а потом поставить кружку. а потом наоборот. как думаешь и в том и в другом случае получится одинаковый эффект? :)) Цитата:
вобщем посмотри код который я запостил - он работает как надо. |
| Часовой пояс GMT +4, время: 20:07. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.