紧耦合组件与松耦合组件
为了使组件在程序中可以配置和重用,你可能会想要创建可以接受属性,创建方法以及分派事件的MXML组件。为了做到这样,组件必须不依赖于特定的程序(紧耦合),包括它们的变量名或标签实例的名字。紧耦合情况下如果程序或者组件的代码改变了,相应的代码就不能再工作,我们必须修改紧耦合的组件来相应这些变化。
一种更清晰也更好的方式是开发松耦合的组件,它可以分派传播返回数据给程序的事件并且包含一些属性使得可以从程序传送信息给它。
这种方式可以让你像创建“黑盒子”一样创建MXML组件,并且有以下好处:
•它们容易重用和维护
•除了内部的组件它们不了解其它的东西
•它们不依赖于一个变量名和标签实例的名字
如我们所说的那样,为了创建一个松耦合的组件我们需要属性来存储信息,需要一个事件模型来分派包含有返回数据的事件。
属性经常在ActionScript中定义(尽管你可以在MXML中定义它们)并且放在一个<mx:Script>块中:
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var lista:ArrayCollection;
]]>
</mx:Script>
定义MXML组件的方法也是一样:
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var lista:ArrayCollection;
public function justWrite():String
{
return "This is a method of the component";
}
]]>
</mx:Script>
在下面的例子中,组件定义了一个作为DataGrid的dataProvider的属性和一个返回字符串的方法。下面是custDataGrid.mxml 文件的全部代码:
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var lista:ArrayCollection;
public function justWrite():String
{
return "This is a method of the component";
}
]]>
</mx:Script>
<mx:DataGrid id="myDG" dataProvider="{lista}" >
</mx:DataGrid>
</mx:VBox>