Обязательные атрибуты в MXML? - PullRequest
1 голос
/ 06 мая 2009

Возможно ли, с помощью каких-либо метаданных, принудительно установить свойство объекта? У нас есть ряд невизуальных компонентов, которые просто ничего не делают, если не установлено одно или несколько свойств, например:

<ToolTip target="{this}">
    <mx:Image source="foo.png" />
</ToolTip>

В этом случае целевое свойство было бы неплохо пометить как требуется, так как не имеет смысла никогда его не устанавливать. Это не очень большая проблема, поскольку ее легко документировать, но было бы неплохо устранить хотя бы несколько циклических отладок, попросив компилятор сообщить разработчику о его ошибке.

Мы не хотим, чтобы этот тег был каким-либо образом избыточным, что можно было бы решить (в данном случае), просто превратив компонент ToolTip в UIComponent и используя родительское свойство. Но, с одной стороны, это добавляет ненужные накладные расходы, а в других случаях это просто не правильно:

<Button id="btn" label="Foo" />
<ToolTip target="{btn}">
    <mx:Image source="foo.png" />
</ToolTip>

Итак, возможны ли обязательные атрибуты mxml?

1 Ответ

1 голос
/ 06 мая 2009

Есть решение, но оно не так просто, как использование метаданных. Просто пусть ваши невизуальные компоненты реализуют интерфейс IMXMLObject. Интерфейс имеет только один метод, «инициализированный». Реализация интерфейса позволяет проверять объект как инициализированный через MXML.

Таким образом ...

public function initialized(document:Object, id:String):void
{
  if ( target == null ) throw new Error( "You must supply an argument to target!" );
} 

Было бы неплохо проверить время компиляции, но это работает прилично.

...