0

MXML 片段 -

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

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

一个任务 -

   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”,则这些任务的属性不会被注入并且为空。

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

4

1 回答 1

2

它可能不是那么直观,但是您使用的 MXML 语法在您的上下文中创建了一个 MyTask 对象,并创建并排列了分配给 MyTask 属性“tasks”的任务,而不是上下文本身。将其视为:

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

当 parsley 自省 myContext 时,它会找到 myTasks 并对其进行处理。它不会找到嵌套在 myTasks 的任务数组中的 aTask 或 bTask。

在 Flex MXML 中,当您将 id 设置为标签时,它会成为实例化它的类的属性——在这种情况下,嵌套的 ATask 和 BTask 将成为您声明它们的上下文的属性.

所以它会更像:

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

...因此,只有这样,当 Parsley 循环遍历上下文的属性时,它才会找到嵌套任务并能够处理它们。

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

HTH,加布里埃尔

于 2011-03-06T05:17:22.267 回答