Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   ASBroadcaster. Генрация классом своих событий. (http://www.flasher.ru/forum/showthread.php?t=63974)

Proman 30.10.2004 15:17

Цитата:

Что касается диспатчера - это просто расширенная событийная модель
И да и нет. Класс EventDispatcher реализует событийную модель компонентов второй версии.
Например, если необходимо связать какой-то обьект с компонентом без постоянных вызовов execute, то очень даже помогает. :)
А так я согласен, AsBroadcaster-а в большенстве случаев достаточно.

llllllllll 30.10.2004 19:11

"без постоянных вызовов execute" - каких еще вызовов? ;) о чем ты дарагой? :)

Manowar1 01.11.2004 12:47

Silin, твой пример, с использованием AsBroadcater, что-то совсем не работает, или я как - тот неправильно создаю объект, можешь более подробнее описать?

Proman 01.11.2004 14:09

llllllllll
Цитата:

о чем ты дарагой?
Допустим у нас есть текстове поле src_fld и мы хотим связать его свойство text со свойством text текстового поля dest_fld с использованием класса Binding
Код:

import mx.data.binding.*;
var src = {component:src_fld, property:"text", event:"onChanged"};
var dest = {component:dest_fld, property:"text"};
var my_bind:Binding = new Binding(src, dest);

Чтобы связь заработала, мы должны после измнения src_fld.text вызвать метод my_bind.execute()
Код:

src_fld.onChanged = function() {
        _root.my_bind.execute(false);
};

или создать событие в стиле компонентов
Код:

import mx.events.EventDispatcher;
EventDispatcher.initialize(src_fld);

src_fld.onChanged = function() {
        this.dispatchEvent({target:this, type:'onChanged'});
};

Очевидно что для такого случая достаточно метода execute, но в более сложных случаях без EventDispatcher не обойтись.
Вот это я и имел ввиду.

Proman 01.11.2004 14:19

llllllllll
Цитата:

о чем ты дарагой?
Допустим у нас есть текстове поле src_fld и мы хотим связать его свойство text со свойством text текстового поля dest_fld с использованием класса Binding
Код:

import mx.data.binding.*;
var src = {component:src_fld, property:"text", event:"onChanged"};
var dest = {component:dest_fld, property:"text"};
var my_bind:Binding = new Binding(src, dest);

Чтобы связь заработала, мы должны после измнения src_fld.text вызвать метод my_bind.execute()
Код:

src_fld.onChanged = function() {
        _root.my_bind.execute(false);
};

или создать событие в стиле компонентов
Код:

import mx.events.EventDispatcher;
EventDispatcher.initialize(src_fld);

src_fld.onChanged = function() {
        this.dispatchEvent({target:this, type:'onChanged'});
};

Очевидно что для такого случая достаточно метода execute, но в более сложных случаях без EventDispatcher не обойтись.
Вот это я и имел ввиду.

Nirth 02.11.2004 16:50

честно говоря не знаю с какого боку начинать.
вот пример.
есть тултипа. должна появляться когда мышка наводить какие либо кнопки(не все)
тоесть нужно событие тултипы которое реагирует на навод мышки к кнопке(все эти кнопки принадлежат классу SubButton)
вот сижу уже полчаса и думаю как бы лучше это дело огранизовать.
ЗЫ тултип это объект в котором будет 1 мувик и 2-3 текстовых полей.ну и тоже принадлежит к своему собственному классу

silin 04.11.2004 18:50

Вложений: 1
Цитата:

Оригинал написал(а) Manowar1
Silin, твой пример, с использованием AsBroadcater, что-то совсем не работает, или я как - тот неправильно создаю объект, можешь более подробнее описать?
см. аттач

2Nirth : непонятно в чем трабл - что тебе мешает в твоем SubButton определить onRollOver() ?

Nirth 07.11.2004 02:38

ну дело не в том что мешает а в том что хочеться освоить данную фичу=) пусть даже пока на не нужных вещах.

столкнулся я тут с проблемкой с твои исходником.
если я убираю с рута эту строчку
Код:

mc.onDoubleClick=function(){trace("dd")}
и вешаю ее уже на мувик

Код:

this.onDoubleClick=function(){trace("dd")}
и делаю скажем четыре экземпляра класса, то получаеться не совсем то что нужно а точнее

dd
dd
dd
dd

тоесть они одновременно реагируют. а как зделать это отдельным для каждого экземпляра?
пытался сделать уже и объект bc и функцию приватной, ничерта.

silin 07.11.2004 11:54

а как же - это же мышиное событие,
можно, например, HitTest приделать, тогда будет срабатывать только на мувике как onPress
Код:

class DblClick extends MovieClip{
        static var bc:Object
        static var dt:Number=300
        private var md:Number
       
        function DblClick(){
                AsBroadcaster.initialize(bc={})
                bc.addListener(this)
                Mouse.addListener(bc)
                var mc=this
                bc.onMouseDown=function(){
                        if(getTimer()-md<dt && mc.hitTest(mc._parent._xmouse,mc._parent._ymouse,true))this.broadcastMessage("onDoubleClick")
                        else md=getTimer()
                }
        }
}


Nirth 07.11.2004 13:57

2 Sliin да спасибо, я уже понял что такое листенеры=) я сделал примерно такоеже но с помощью еще онРоллОвер, РолАут

спасибо=)
*ушел мучаться дальше*


Часовой пояс GMT +4, время: 11:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.