2011-01-20 1 views
0

MXML фрагмент кода -Почему инъекция терпит неудачу, когда я не предоставляю «id» в следующем коде flex/петрушки?

<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), свойство из этих задач не вводятся и являются нулевыми.

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

+0

я не знаю, но если вы не получите ответ на свой вопрос здесь, я предлагаю вам разместить на форуме петрушка, там, как правило, хорошие обратные связи там –

ответ

2

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

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

Когда петрушка introspects 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 правильно введен в них, но, конечно, они не будут работать в очереди, поскольку вы нуждаетесь в них.

НТН, Gabriel

Смежные вопросы