Parsley自动组件装配实例

前面的实例我们都是使用<Configure>标签将一个组件直接连接到它所在的上下文中,这就是显式组件装配。这种方式虽然很方便的,但它不是唯一的方法。而且这种方式带来了一个问题:我们不得不为每个要管理的组件类添加配置标签。可不可以使用上下文配置文件来管理这些组件呢?

自动组件装配

答案是肯定的。Parsley具有自动组件装配功能,它让您能够集中配置哪些视图应该管理,哪些视图不应该管理。自动组件装配必须显式地激活。如下面代码片段:

<parsley:ContextBuilder>
  <parsley:ViewSettings autowireComponents="true"/>
  <parsley:FlexConfig type="AppConfig" />
</parsley:ContextBuilder>

在ContextBuilder设置ViewSettings的autowireComponents属性值true,然后变可以在上下文配置文件添加标签了。如Parsley-Autowire实例中的配置:

<fx:Declarations>
  <model:SharedModel/>
  <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(&quot;views::&quot;) == 0) 
    {
      return ViewAutowireMode.ALWAYS;
    }
    else
    {
      return ViewAutowireMode.NEVER;
    }
  }  
}

此处的逻辑很简单:如果视图的完全限定类名中包含views就管理该视图。然后在ContextBuilder将ViewSettings的autowireFilter属性值指定为AutowireFilterSample类的实例。上下文配置文件中就可以不需要配置视图了。Parsley-AutowireFilter实例的工程结构应该是这样的:

自动组件装配过滤器

点击此处查看该实例最终效果,点击此处下载该实例的源码。

要更多了解Parsley自动组件装配,请查看Parsley文档相应部分

发表评论