Flex MXML属性中应包含多少逻辑?

时间:2009-08-19 15:22:51

标签: flex mxml

是否应将编程逻辑插入MXML属性?我有一些按钮,可能会也可能不会根据相关组件的状态(例如DataGridList)调度事件,我试图弄清楚逻辑是否足够简单到简单嵌入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!")" />

忽略这些片段中的一些明显问题(例如静态字符串,缺少数据提供者的代码等),我对第二个例子有一些顾虑:

  • MXML的可读性较差(它变得漫长而混乱)
  • 由于单击Button需要更多函数调用,MXML中的逻辑变得更加笨拙。
  • 在MXML中嵌入逻辑使其不那么直观(至少对我而言)。如果我想知道MXML的逻辑,我更倾向于查看Script标签,我期待ActionScript。

在MXML属性中插入逻辑是否还有其他优点?我越来越多地看到这种用法了,我想确保我没有错过任何令人信服的理由来改变我做事的方式。

2 个答案:

答案 0 :(得分:1)

如果代码长度超过一行,就像警告或最多可无条件地设置变量一样,我无法想到将逻辑添加到MXML代码中的任何真正好处。想象一下尝试内联读取switch语句。

答案 1 :(得分:1)

将多个内衬放入内联并不是一个好主意。难以阅读,难以调试。 要使内联代码更具可读性,请将其放在花括号中并将其写入多行。