前面的实例我们都是使用 <Configure>
标签将一个组件直接连接到它所在的上下文中,这就是显式组件装配。这种方式虽然很方便的,但它不是唯一的方法。而且这种方式带来了一个问题:我们不得不为每个要管理的组件类添加配置标签。可不可以使用上下文配置文件来管理这些组件呢?
自动组件装配
答案是肯定的。Parsley 具有自动组件装配功能,它让您能够集中配置哪些视图应该管理,哪些视图不应该管理。自动组件装配必须显式地激活。如下面代码片段:
<parsley:ContextBuilder>
<parsley:ViewSettings autowireComponents="true"/>
<parsley:FlexConfig type="AppConfig" />
</parsley:ContextBuilder>
在 ContextBuilder
设置 ViewSettings
的 autowireComponents
属性值 true
,然后变可以在上下文配置文件添加 <View>
标签了。如 Parsley-Autowire 实例中的配置:
<fx:Declarations>
<model:SharedModel11/>
<parsley:View type="views.SenderView"/>
<parsley:View type="views.ReceiverView"/>
</fx:Declarations>
现在两个 View 中可以不使用 <Configure>
标签了。最终该实例的工程结构应该是这样的:
实际上,该方法只能算是手动装配组件,如果项目中会很多要管理的视图,该方法就不实用了。更简捷有效的做法是使用自定义过滤器,通过编程的方式定义一定规则来自动装配组件。
自定义过滤器
自定义过滤器最简单的方法是扩展 DefaultViewAutowireFilter
和覆盖 filter
方法。如 AutowireFilterSample 类所示:
public class AutowireFilterSample extends DefaultViewAutowireFilter
{
override public function filter(object:DisplayObject):ViewAutowireMode
{
var fullClassname:String = getQualifiedClassName(object);
if (fullClassname.indexOf("views::") == 0)
{
return ViewAutowireMode.ALWAYS;
}
else
{
return ViewAutowireMode.NEVER;
}
}
}
此处的逻辑很简单:如果视图的完全限定类名中包含 views 就管理该视图。然后在 ContextBuilder
将 ViewSetting
s 的 autowireFilter
属性值指定为 AutowireFilterSample
类的实例。上下文配置文件中就可以不需要配置视图了。Parsley-AutowireFilte
r 实例的工程结构应该是这样的:
点击此处下载该实例的源码。
参考文档
要更多了解 Parsley 自动组件装配,请查看 Parsley 文档相应部分。
评论 (0)