Почему инъекция завершается неудачно, когда я не предоставляю 'id' в следующем коде flex / parsley? - PullRequest
0 голосов
/ 20 января 2011

Фрагмент MXML -

   <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

Если я пропущу 'id' из 2 задач (ATask, BTask), свойство этих задач не будет введено и будет нулевым.

Требуется ли петрушке идентификаторы на объектах для управления ими?

1 Ответ

2 голосов
/ 06 марта 2011

Это может быть не так интуитивно понятно, но используемый вами синтаксис MXML создает MyTask объект в вашем контексте и создает и массив с задачами, которые он назначает свойство «задачи» MyTask, а не самого контекста. Это может помочь думать об этом как:

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

Когда петрушка анализирует myContext, она находит myTasks и обрабатывает его. Он не найдет aTask или bTask, которые вложены в массив задач в MyTasks.

В Flex MXML, когда вы устанавливаете идентификатор для тега, он становится свойством класс, в котором он создается - в этом случае, вложенный ATask и BTask станет свойствами контекста, в котором вы их объявляете.

Так будет больше похоже:

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

... Так что только тогда, когда Петрушка просматривает свойства вашего контекста, найдет ли он вложенные задачи и сможет их обработать.

Я знаю, что MyTask не имеет этого идентификатора myTask, но ему это не нужно, так как это прямое свойство контекста (поэтому достаточно автоматически сгенерированного имени свойства). Если вы удалите TaskA и TaskB из определения MyTask и разместите их на том же уровне, что и MyTask, вы увидите, что PM правильно введен в них, но, конечно, они не будут работать в очереди, так как они вам нужны.

НТН, Габриэль

...