Архів для категорії ‘Найденные блохи’

Flex Builder иногда “не видит” класс

воскресенье, июнь 15, 2008

Если условием оператора if является результат функции, и тело оператора начинается со скобки “(”, то Flex Builder не подскажет имя класса в котором есть подобный if.

Вот пример:

  1. package
    1. {
    1. public class Flea
    2. {
      1. public function Flea()
      2. {
        1. if(this.hasOwnProperty(”startJump”))
          1. (this as Object).startJump()
      3. }
    3. }
  2. }

В другом классе того же проекта при нажатии Ctrl+Space мы не увидим класс Flea.

1.gif

Также в самом классе не будут работать большинство возможностей Flex Builder, как например переход по F3, или Ctrl+o.

Такого не случиться, если использовать фигурные скобки для обрамления тела оператора if :)

  1. if(this.hasOwnProperty(”startJump”))
  2. {
    1. (this as Object).startJump()
  3. }

Результат:

2.gif

getter/setter + (increment || decrement) = жук в компиляторе

пятница, май 30, 2008

Имеем переменную заданную с помощью get и set функций:

  1. var _num:Number = 0;
  2. function get num():Number
  3. {
    1. return _num;
  4. }
  5. function set num(value:Number):void
  6. {
    1. _num = value;
  7. }

Создаём ещё одну переменную:

var num2:Number = num++;

Получаем ошибку компиляции:

1067: Implicit coercion of a value of type void to an unrelated type Number.

Думаю получается вот так:

var num2:Number = set num(get num() +1);

А так как результат set num() равен void, то мы и получаем ошибку.

[AIR] NativeMenu + SystemTrayIcon - MouseEvent.RIGHT_CLICK = БОЛТ

вторник, апрель 15, 2008

Да, в AIR можно использовать своё контекстное меню, добавлять подменю и т.д. Мы даже можем вызвать его, когда захочем, а не только по правому клику. Для этого у класса NativeMenu есть метод:

  1. NativeMenu.display(stage:Stage, stageX:Number, stageY:Number):void

Всё бы хорошо, но есть одно но :(

Как Вы видите метод display() принимает первым параметром Stage, но у SystemTrayIcon нет stage :( Т.е. если нам нужно отобразить меню возле трея (с помощью display()), то нужно использовать Application.application.stage, но тогда нам нужно будет поразмыслить как спозиционировать меню :) Ведь координаты SystemTrayIcon неизвестны…

E4X синтаксис для не XML

пятница, март 14, 2008

При использовании синтаксиса E4X для не XML объектов, компилятор Вам ничего не скажет, но в run-time получите ошибку.

var obj:Object = {a:1};
trace( obj.(a == 1) );

TypeError: Error #1123: Filter operator not supported on type Object.

Dictionary не поддерживает QName

среда, март 12, 2008
  1. import flash.utils.*;
  2. var d:Dictionary = new Dictionary();
  3. var qn:QName = new QName(new Namespace(’ns’), ‘name’);
  4. d[qn] = true;

Последняя строчка кода выдаст ошибку:
ReferenceError: Error #1056: Cannot create property ns::name on flash.utils.Dictionary.

Т.е. нельзя создать переменную в Dictionary типа QName.

А Вы знаете какие ещё типы не поддерживает Dictionary?

Благодарю Олега Галабурда (он же a_[w]) за информацию!