![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|
|
|||||
|
Есть мувиклип с описанием класса:
#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!
__________________
Я не любопытный и хитрый, а любознательный и сообразительный! Последний раз редактировалось Lego; 28.07.2004 в 14:57. |
|
|||||
|
Регистрация: Jul 2002
Адрес: Ст.-Петербург
Сообщений: 268
|
Напиши функцию-сеттер для присвоения Grid.recordSet нового значения и вызывай в ней Draw().
|
|
|||||
|
Если вроде этого
TGrid.prototype.SetRecordSet = function(recordSet) { this.recordSet = recordSet; this.Draw(); } а потом Grid1.SetRecordSet(recordSet); - то не очень бы хотелось. По-моему, как-то коряво получается.
__________________
Я не любопытный и хитрый, а любознательный и сообразительный! Последний раз редактировалось Lego; 28.07.2004 в 16:11. |
|
|||||
|
Регистрация: Apr 2003
Сообщений: 243
|
См. 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() вручную вызывать ![]()
__________________
Я не любопытный и хитрый, а любознательный и сообразительный! |
|
|||||
|
Регистрация: Apr 2004
Адрес: Минск
Сообщений: 176
|
Переходи на actionscript 2.0
Все красиво
__________________
Юра |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
не обязательно под семёрку переделывать.
просто глупостей писать не надо :) Lego, объясни пожалуйста, почему ты СНАЧАЛА создаёшь прототип функции, а только потом создаёшь саму функцию? :)) это во-первых. во-вторых - почему ты СНАЧАЛА создаёшь сеттер, передаёшь ему сетовую функцию, а только потом эту сетовую функцию создаёшь? :) что за чудеса? :) в-третих: всегда можно протрейсить результат выполнения функции addProperty. если возвратилось false - то выполнения сеттера ждать бесполезно: свойство просто не было создано. а не создаётся оно потому, что ты передаёшь ему сеттер, но не передаёшь геттер :)) read only свойства я еще видел, а вот write only - это что-то дзен-буддистское :)) и в-самых-последних: зачем вся эта заморочка с классом и инитклипом, если ты не регистрируешь класс при помощи Object.registerClass? итого: #initclip
function TGrid() {
trace("constructor");
}
TGrid.prototype = new MovieClip();
TGrid.prototype.SetRecordSet = function(rs) {
this.recordSet = rs;
trace("recordSet changed!");
};
TGrid.prototype.GetRecordSet = function() {
return this.recordSet;
};
TGrid.prototype.addProperty("recordSet", TGrid.prototype.GetRecordSet, TGrid.prototype.SetRecordSet);
//
Object.registerClass("TGrid", TGrid);
#endinitclip
|
|
|||||
|
По поводу первого - в целом, согласен, но не вижу принципиальной ошибки - ведь работает в обоих случаях.
По поводу второго - я же могу, допустим, написать так f = pi_2(); function pi_2() { return Math.Pi()/2; } ? Ведь работает. Третье, пропущу - лопухнулся. А про последнее ВООБЩЕ не понял. Но все равно спасибо.
__________________
Я не любопытный и хитрый, а любознательный и сообразительный! |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
это связано со следующим вопросом: Цитата:
function name (args) { .. } то её объявление перемещается при компиляции на самый верх. как будто ты написал это в первых строчках скрипта. т.е. это происходит даже без твоего ведома. а вот если ты создаёшь функцию так: name = function () { .. }; то там где написал объявление - там оно и будет. только благодаря этой особенности компилятора флэша у тебя что-то работало. но логика-то при этом принципиально не правильная... собственно это меня и восхитило :) всё задом-наперёд :) а то что оно почему-то работает даже при неправильно логически построенном скрипте - это не показатель. работает - замечательно. но я бы посоветовал писать код сверху вниз и слева направо, а не как-нибудь еще :)) попробуй сначала налить чай, а потом поставить кружку. а потом наоборот. как думаешь и в том и в другом случае получится одинаковый эффект? :)) Цитата:
вобщем посмотри код который я запостил - он работает как надо. Последний раз редактировалось Nox Noctis; 29.07.2004 в 17:09. |
![]() |
Часовой пояс GMT +4, время: 14:50. |
|
|
« Предыдущая тема | Следующая тема » |
|
|