Flex + MXML id属性命名约定/最佳实践

时间:2010-11-03 17:25:08

标签: flex naming-conventions mxml

由于命名空间中存在很多潜在的污染,特别是解析器自动声明任何具有id的MXML组件可以使用该ID公开访问,我发现使用camelCase来处理MXML元素ID是危险的。

例如:

<mx:TextInput id="textOne" text="This is a test" />
<mx:Button id="buttonOne" label="Click Me" click="textOne.text='Testing 1-2-3'" />

在这个相当简单的例子中,很明显Button的点击处理程序中的“textOne”指的是ID为“textOne”的TextInput。在以下示例中,它变得不那么明显了:

<mx:Button id="buttonTwo" label="Change Tab" click="tabNav.selectedChild=newState" />

“newState”在TabNavigator上下文中引用ID为“tabNav”的id为“newState”的INavigationContent实例并不是很明显。

如果我们在fx:Script块中执行此操作,或者在外部AS类文件中更糟糕(更好),这将变得更加清晰。

public function buttonClickHandler(event:FlexEvent):void {
    tabNav.selectedChild = newState;
}

在这个AS类文件中我们没有声明tabNav或newState,因此,乍一看,我们期望解析器抱怨。但事实并非如此,因为这些ID会自动声明为公共属性。

我所得到的是感觉对我来说,我们应该制定一个公约,使这些公共财产的来源更加明显。像

这样的东西
id="mxTabNav"

id="TXTMyTextInput"

或者只是使用下划线

id="my_text_input"

在Flash开发中,我们很多人为(自动)声明的舞台实例(如“mcMyTabBar”或“navMC”或“playPauseBTN”)执行此操作。

我正在寻找Flex社区对此的意见。我只是在想事情吗?我在这个主题上阅读的所有相关样式指南和最佳实践文档只是说“使用camelCase for id,并确保id属性是第一个属性”。

你有什么看法?

2 个答案:

答案 0 :(得分:1)

我认为这并不是什么大不了的事。

我的所有组件都被封装(尽可能多),我甚至不给MXML中的元素ID,除非我真的必须(即模块后面的代码中引用了它)。

我宁愿通过

与我的组件进行交互
myComponent.foo(bar);

其中函数在myFooComponent上设置文本

而不是

myComponent.myFooComponent.text = bar;

如果您根本没有引用MXML文件,则可以更进一步。我们有用AS编写的View类,它们都扩展了Group。在他们的createChildren函数中,我们添加了用MXML文件编写的组件。

这意味着没有任何内容直接针对MXML文件(除非他们通过显示列表开始生根,这可以快速说明关节),而View类完全封装了View对象。

我们甚至更进一步,只是通过它们的接口引用视图类,因此我们可以非常轻松地实现视图的多个实现(比如客户特定的更改)。

答案 1 :(得分:1)

我建议对id“”使用一对“目的和类名”。例如:

printButton, loggerTextArea, resultsDataGrid, etc

并且对于事件处理程序使用“on”模式。例如:

onPrintButtonClick(event:MouseEvent):void
onLoggerTextAreaChange(event:Event):void
onResultsDataGridSelect(event:Event):void
  1. 因为它以“on”开头,很明显该方法是事件处理程序
  2. 它在处理程序名称中有组件名称 - 现在很清楚谁触发事件
  3. 它有关于事件类型的信息 - 点击,更改,选择......所以它清楚它是什么样的事件......