Архів для категорії ‘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>