2011-01-20 24 views
0

MXML片段 -为什么当我在下面的flex/parsley代码中不提供'id'时注射失败?

<startup:MyTasks autoStart="false" > 
     <startup:tasks> 
     <startup:ATask id="aTask" /> 
     <startup:BTask id="bTask" />   
     </startup:tasks> 
    </startup:MyTasks> 

    <Object type="{ MyViewPM }" id="someID"/> 

ATask -

public class ATask extends Task 
    { 
     [Inject] 
     public var viewPM : MyViewPM; 
    } 

MyTasks基于http://code.google.com/p/rojored/source/detail?r=4b0a2dc267

如果我离开了的2个任务(ATask,BTask) '身份证',属性这些任务没有被注入并且为空。

欧芹是否需要在对象上的ID来管理它们?

+0

我不知道,但如果你没有得到你的答案在这里,我建议您发布的香菜论坛上,通常有良好的反馈有 – 2011-01-20 08:17:40

回答

2

这可能不是直观的,但您使用的MXML语法在你的上下文创建一个 MyTask对象,而不是上下文本身创建和MyTask与任务的阵列,它分配给 属性“任务”, 。这可能有助于 把它作为:

myContext.myTasks.tasks = [aTask, bTask]; 

当香菜内省myContext,它会找到myTasks,将对其进行处理。 它不会在 myTasks中找到嵌套在任务数组内的任务或bTask。

在Flex MXML,当你设置一个ID标签它便成为 类,它被实例化的属性---在这种情况下,嵌套ATask和 BTask将成为上下文的性质你正在宣布他们。

所以会更喜欢:

myContext.myTasks.tasks = [aTask, bTask]; 
myContext.aTask = aTask; 
myContext.bTask = bTask; 

...所以只有到那时,当香菜遍历您的上下文的属性, 将它找到嵌套的任务,以及和将能够处理他们。

我知道MyTask没有myTask id,但它不需要它,因为它是上下文的直接属性(所以自动生成的属性名称就足够了)。如果你将TaskA和TaskB从MyTask定义中取出并将它们放在与MyTask相同的级别上,你会发现PM已经被正确地注入到它们当中,但是它们当然不会在队列中工作你需要他们。

HTH, 加布里埃尔

相关问题