2009-07-22 5 views
1

Я просто столкнулся с проблемой странного связывания. В мини-приложении ниже компонент Flex Label обновляется, когда изменяется «someText», но мой метод boundSetter не будет вызываться после первого начального вызова.Фундаментальная проблема с привязкой

Вкратце: почему функция boundSetterForSomeText() не вызывается, а метка обновляется?

Может ли кто-нибудь пролить свет на этот фундаментальный вопрос? Бесконечно благодарен!

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="1024" minHeight="768" 
    initialize="onInitialize()" 
> 
    <mx:Panel> 
     <mx:Label text="{this.someText}" /> 
     <mx:Button label="Set random text" click="generateRandom()" /> 
    </mx:Panel> 

    <mx:Script> 
     <![CDATA[ 
      import mx.binding.utils.ChangeWatcher; 
      import mx.binding.utils.BindingUtils; 


      [Bindable(event="xxx")] 
      public var someText : String; 


      public function onInitialize() : void 
      { 
       var cw:ChangeWatcher = BindingUtils.bindSetter(boundSetterForSomeText, this, ['someText']); 
      } 

      public function generateRandom() : void 
      { 
       this.someText = String(Math.round(Math.random() * 10000)); 
       this.dispatchEvent(new Event("xxx")); 
      } 


      public function boundSetterForSomeText(obj:Object) : void 
      { 
       trace(obj); 
      } 
     ]]> 
    </mx:Script> 
</mx:Application> 

ответ

0

Вы можете использовать этот код для создания получить/установить пару или «свойство»:

private var _someText:String; 

[Bindable(event="xxx")] 
public function get someText():String 
{ 
    return _someText; 
} 

public function set someText(value:String):void 
{ 
    if (_someText != value) 
    { 
     _someText = value; 
     this.dispatchEvent(new Event("xxx")); 
    } 
} 
+0

Правильно, вам даже не нужен сеттер, т. Е. Вы можете изменить значение/отправить событие в любую нужную вам функцию. Но важно иметь геттер. – Tom

0

Он работает, когда событие по умолчанию. (По умолчанию события propertyChange)

[Bindable] 
public var someText : String; 

Я сделал некоторые отладки, и я понятия не имею, почему он не работает с пользовательским событием. Думаю, так и должно быть.

+0

Да, странно .. Совсем Что касается тоже. Я отправлю его на документацию Adobe в качестве комментария. – Tom

Смежные вопросы