문제

ActionScript에 CircleButton 클래스가 있습니다. 누군가가 외부 적으로 'ON'속성을 변경했는지 알고 싶습니다. 나는 'Onchange'를 듣고 있지만 그 이벤트 핸들러를 강타하지는 않습니다.

나는 'on'속성을 get/setter로 쓸 수 있다는 것을 알고 있지만 [bindable]을 사용하는 것의 단순함이 마음에 듭니다.

물체가 자신의 이벤트를들을 수 없습니까?

public class CircleButton extends UIComponent

{
    [Bindable]
    public var on:Boolean;

    public function CircleButton()
    {
        this.width = 20;
        this.height = 20;

        graphics.beginFill(0xff6600, 1);
        graphics.drawCircle(width/2, height/2, width/2);
        graphics.endFill();

        this.addEventListener(MouseEvent.ROLL_OVER, rollover);  
        this.addEventListener(MouseEvent.ROLL_OUT, rollout);        

        this.addEventListener('onChange', onOnChange);
    }       

    private function onOnChange(event:PropertyChangeEvent):void {
도움이 되었습니까?

해결책

이벤트 유형을 지정하지 않고 [bindable] 태그를 사용하는 경우, 속성이 값을 변경하면 유형의 이벤트 : PropertyChangeEvent.property_change (String 'PropertyChange')가 발송됩니다.

따라서 해당 이벤트를들을 수 있도록 등록하려면 다음과 같이 말해야합니다.

this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onOnChange);

청취자 기능이 호출되지 않은 이유는 이벤트 유형이 올바르지 않았기 때문입니다.

청취자 방법은 'on'뿐만 아니라 클래스에서 바인딩 가능한 것으로 표시된 변수 중 하나가 호출됩니다. 이 이벤트에는 어떤 변수가 변경되었는지를 나타내는 '속성'이라는 속성이 함께 제공됩니다.

각 바인딩 가능한 변수에서 호출되지 않으려면 [bindable] 태그의 이벤트를 지정해야합니다.

[Bindable(event="myOnChangeEvent")]

그리고 속성이 바뀌고 있다고 생각할 때 (예 : 세터에서) 이벤트를 수동으로 파견하십시오.

다른 팁

bindingutils.bindsetter ()를 사용할 수 있습니다.

예가 발견됩니다 여기.

무언가가 변수에 결합 할 수 있다고해서 무언가가 변수에 묶여 있음을 의미하지는 않습니다. 이벤트 시스템과 비슷합니다. 이벤트를 파견 할 수 있기 때문에 아무것도 듣고 있다는 의미가 아닙니다.

플렉스 바인딩이 기반으로하는 클래스는 바인딩 틸과 변화 시주입니다. MXML (컴파일러에 의해 AS3로 변환되는)에서 직접 바인딩하면 장면 뒤에 이러한 클래스를 사용하여 실제로 바인딩을 설정합니다. 나는 잠재적으로 바인딩 가능한 항목의 목록을 살펴보면 changeWatcher를 파헤 쳤다. 전체 바인딩 시스템은 실제로 이벤트 시스템 주변의 스마트 래퍼입니다.

MXML 대신 AS3에서 결합의 의미는 다릅니다. MXML에서 작동하는 미묘한 차이 (물체의 어린이 특성으로의 체인)는 동작을 복제하기 위해 AS3의 작업 (아마도 MXML에서 AS3 사이의 코드 생성 결과)을 복제해야합니다.

이것을 살펴보십시오 Adobe Doc AS Code의 ChangeWatcher에 대한 약간의 정보.

개인적으로 - 나는 그것이 서투른 느낌이 들기 때문에 MXML 외부의 바인딩을 사용하지 않습니다. 세터 기능이 더 예측 가능하고 수행 가능성이 높기 때문에 대신 세터 기능을 작성하는 것이 좋습니다. 또한 ChangeWatcher 및 BindingUtils의 소스 코드를 읽는 것이 좋습니다. 그것은 당신이 읽을 가능성이 가장 높은 AS3 중 일부입니다.

내가 가장 좋아하는 접근법 중 하나는 발견 된 관찰 클래스입니다. 여기. 기본적으로 세터를 사용하고 있지만 반복 가능한 접근 방식입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top