Архів для категорії ‘MXML’

<mx:Binding />

середа, Травень 28, 2008

Доволі часто ми створюємо глобальну змінну (в рамках mxml-компоненту), яка зв’язується (binding) зі змінною внутрішнього компоненту:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>
    1. <mx:TextInput text=”{textInputText}” />
    2. <mx:String id=”textInputText” />
  3. </mx:Canvas>

Але при цьому зв’язування є одностороннім, тобто, в наведеному прикладі, якщо користувач введе текст в поле, то змінна textInputText не зміниться. На допомогу приходить теґ <Binding>.

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>
    1. <mx:TextInput id=”ti” text=”{textInputText}” />
    2. <mx:String id=”textInputText” />
    3. <mx:Binding source=”ti.text” destination=”textInputText” />
  3. </mx:Canvas>

Єдиний мінус в тому, що треба вигадувати id для TextInput :)

Оновлення:

Виявляється, що можна зробити простіше :)

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>
    1. <mx:TextInput id=”ti” text=”{textInputText}” />
    2. <mx:String id=”textInputText”>{ti.text}</mx:String>
  3. </mx:Canvas>

Це не позбавляє нас від вигадування id, але зберігає одну строчку коду. А <binding> можна використовувати для зв’язування до більш ніж одного об’єкту.

[MXML] Як зробити setter, який приймає числове значення та значення у відсотках?

понеділок, Березень 10, 2008

Ви ніколи не замислювались як може setter (в mxml), наприклад width, який повинен приймати Number, може приймати значення виду ‘50%’?

Насправді все дуже просто. Існує метатаґ [PercentProxy], який як параметр приймає ім’я методу, який буде задіяно, якщо значення буде задано у відсотках.

Приклад. Створимо клас FleasCatcher:

  1. package
  2. {
    1. import mx.containers.Canvas;
    1. public class FleasCatcher extends Canvas
    1. {
      1. [PercentProxy(”percentFleasCountInMyHead“)]
      1. public function set fleasCountInMyHead(value:Number):void
      1. {
        1. trace(”number: “+value);
      1. }
      1. public function set percentFleasCountInMyHead(value:Number):void
      1. {
        1. trace(”percent: “+value);
      1. }
    1. }
  3. }

Тепер можемо написати хоч так:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” xmlns:local=”*”>
    1. <local:FleasCatcher fleasCountInMyHead=”1000” />
  3. </mx:Application>

Хоч так:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” xmlns:local=”*”>
    1. <local:FleasCatcher fleasCountInMyHead=”99%” />
  3. </mx:Application>