Должна ли программная логика быть вставлена в атрибут MXML?У меня есть несколько кнопок, которые могут или не могут отправлять события на основе состояния связанных компонентов (например, DataGrid
или List
), и я пытаюсь выяснить, достаточно ли проста логика для простого встраивания в один изатрибуты Event в MXML.
Вот как я это делаю:
<mx:Script>
<![CDATA[
private function sendEvent1():void {
if (list.selectedIndex != -1) {
dispatchEvent(new Event("click!"));
}
}
]]>
</mx:Script>
<mx:List id="list" dataProvider={listData} />
<mx:Button label="Click!" click="sendEvent1()" />
В этом примере код ActionScript, содержащийся в теге Script, содержит логику для определения того, стоит или нетсобытие должно быть отправлено.
Кнопка, однако, может быть немного изменена, устраняя необходимость в функции sendEvent1
:
<mx:Button label="Click!" click="if (list.selectedIndex != -1) dispatchEvent(new Event("click!")" />
Игнорирование некоторых очевидных проблем в этихфрагменты (например, статические строки, отсутствующий код для поставщика данных и т. д.), у меня есть несколько проблем со вторым примером:
- MXML менее читабелен (он становится длинным и загроможденным)
- Поскольку для нажатия кнопки требуется больше вызовов функций, логика в MXML становится гораздо более громоздкой.
- Внедрение логики в MXML делает его менее интуитивнымIve (для меня по крайней мере).Если я хочу узнать логику MXML, я более склонен заглянуть в тег
Script
, где я ожидаю ActionScript.
Есть ли другие плюсы за вставкой логики в MXMLатрибут?Я видел это использование все чаще и чаще, и я хочу убедиться, что я не упускаю никаких веских причин изменить то, как я делаю вещи.