【发布时间】:2010-11-21 00:03:30
【问题描述】:
是否应该将编程逻辑插入到 MXML 属性中?我有一些按钮可能会或可能不会根据相关组件的状态(例如DataGrid 或List)调度事件,我试图弄清楚逻辑是否足够简单,可以简单地嵌入其中之一MXML 中的 Event 属性。
以下是我的工作方式:
<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()" />
在此示例中,Script 标签中包含的 ActionScript 包含用于确定是否应分派事件的逻辑。
但是,可以对按钮进行一些修改,从而不再需要 sendEvent1 函数:
<mx:Button label="Click!" click="if (list.selectedIndex != -1) dispatchEvent(new Event("click!")" />
忽略这些 sn-ps 中的一些明显问题(例如静态字符串、缺少数据提供者的代码等),我对第二个示例有一些担忧:
- MXML 可读性较差(变得冗长且混乱)
- 随着点击按钮需要更多的函数调用,MXML 中的逻辑变得更加笨拙。
- 在 MXML 中嵌入逻辑使其不太直观(至少对我而言)。如果我想了解 MXML 的逻辑,我更倾向于查看
Script标记,我希望在该标记中使用 ActionScript。
在 MXML 属性中插入逻辑还有其他优点吗?我越来越频繁地看到这种用法,我想确保我不会错过任何令人信服的理由来改变我的做事方式。
【问题讨论】:
-
我同意你的看法。我可以从直接在 MXML 中向事件添加逻辑中看到它们的唯一好处是用于快速原型设计。我更喜欢阅读像您这样的代码,例如我自己,尽管我希望看到一个更好的函数名称。 ;)
-
是的,快速输入代码 sn-ps 通常会导致糟糕的函数名称和 ids.. 真正的代码有更好的命名约定 ;) 感谢您的想法!
标签: apache-flex mxml