Архів для Березень, 2008

[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>

Напилок для Flex: mx_internal

п’ятниця, Березень 7, 2008

Адобівці доволі часто використовують namespace mx_internal для внутрішнього спілкування між компонентами. Але й нам з Вами, іноді, корисно використати цей namespace. Наприклад, нам потрібно в Button.label відобразити html-текст.

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”vertical”>
    1. <mx:Button id=”helloB” label=”Hello World!”/>
    1. <mx:creationComplete>
      1. <![CDATA[
      1. helloB.getTextField().htmlText = “<u><i>H</i>ello World!</u>”;
      1. // можна написати і так, тоді нам не потрібно було б застосовувати namespace
      1. // helloB.mx_internal::getTextField().htmlText = “<u><i>H</i>ello World!</u>”;
      1. ]]>
    1. </mx:creationComplete>
    1. <mx:Script>
      1. <![CDATA[
      1. import mx.core.mx_internal; // імпортуємо namespace
      1. use namespace mx_internal; // застосовуємо його
      1. ]]>
    1. </mx:Script>
  3. </mx:Application>

Але це треба використовувати дуже обережно, т.я. дуже легко зламати компонент (тому що запуск подібного методу не буде входити в життєвий цикл компонента) або при наступному оновленні, компонент верне усі задані значення до тих які були перед використанням напилку.

flash.events.IOErrorEvent.id?

четвер, Березень 6, 2008

Невеличка помилка у допомозі Flex Builder 3. Там сказано, що у IOErrorEvent є властивість id:

id:int (default = 0) — A reference number to associate with the specific error.

Також є такий самий параметр у конструкторі:

public function IOErrorEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, text:String = "", id:int = 0)

Але насправді ніякого id немає. Це підтверджують тести та локальна допомога Flash CS3 (але на liveDocs для Flash CS3 теж помилка ).
Чи може я помиляюсь?

Загадка про Date

середа, Березень 5, 2008

trace( Date( new Date() ) is Date );

Що буде в output?

Далі відповідь

(more…)

Design View у Flex Builder 3 видає трейси

вівторок, Березень 4, 2008

Якщо використати якийсь флеш-трейсер (я використовую Flash Tracer для firefox), то можна зловити трейси від Design View у Flex Builder 3.

Наприклад при натисканні кнопки миші на пустий Application видає таке:

-> Begin call to AS: setFrameRate(60.0)
<- End call to AS: setFrameRate, Result = null
-> Begin call to AS: handleLMouseDown(121,160,false,false,false)
<- End call to AS: handleLMouseDown, Result = null

При відпусканні:

-> Begin call to AS: setFrameRate(24.0)
<- End call to AS: setFrameRate, Result = null
-> Begin call to AS: handleLMouseUp(121,160,false,false,false)
<- End call to AS: handleLMouseUp, Result = null

Зразу бачимо, що при натисканні, а після цього можливе таскання компоненту, збільшується частота кадрів. Напевно щоб перетаскування було плавніше :)