Модель инъекции в визуальном компоненте

Я использую фреймворк Петрушки. Я пытаюсь внедрить модель в пользовательский компонент визуального дерева;

private var _model:Model

[Bindable]

public function get model():Model
{
  return _model;
}

public function set model(value:Model):void
{
  _model = value;
}

Конфигурация сборки:

<Object id="customTree" type="{CustomTree}">
  <Property name="model" idRef="model"/>
</Object>

Затем я использую это дерево в mxml:

<components:CustomTree
        id="categoriesTree"
        width="100%" height="100%"
        labelField="@title"
        right="0" bottom="0" left="0" top="10"           
        doubleClickEnabled="true"
        maxHorizontalScrollPosition="250"
        horizontalScrollPolicy="auto"
        dragEnabled="true"
        dropEnabled="true"
        dataProvider="{model.dataHolder}"
        />

Я попытался переопределить родительскую функцию, и у меня возникла ошибка. (модель нулевая); override protected function dragDropHandler(event:DragEvent):void { model.action = "drop" }

Я установил точку останова в установщике модели, и она была выполнена, но модель по-прежнему равна нулю;

В чем проблема?


person nkukhar    schedule 22.08.2011    source источник
comment
Код, который вы разместили, не имеет смысла. Пожалуйста, покажите все это. Кроме того, вы ничего не вводите.   -  person J_A_X    schedule 23.08.2011
comment
Я опускаю конфигурацию модели в Build Config.   -  person nkukhar    schedule 23.08.2011


Ответы (2)


Я нашел, как решить эту проблему. Если мы попытаемся внедрить что-то в визуальный компонент, мы должны настроить его так же, как мы настраиваем визуальные компоненты.

public class CustomTree extends Tree
{

public function CustomTree ()
{
  super();
  this.addEventListener(Event.ADDED_TO_STAGE, configure);
}

protected function configure(event:Event):void
{
  this.dispatchEvent(new Event ('configureIOC', true));
}

... }

Мб у кого-то есть какое-то другое решение?

person nkukhar    schedule 23.08.2011

Не уверен, что вы хотите, чтобы петрушка создавала экземпляр CustomTree. Вместо этого вставьте модель в представление и позвольте экземпляру CustomTree в mxml привязаться к модели.

Конфигурация:

<Object id="model" type="Model"/>

MXML:

<mx:Script>
        <![CDATA[
[Inject(id='model')]
[Bindable]
public var model:Model;
]]>
    </mx:Script>

<components:CustomTree
        id="categoriesTree"
        width="100%" height="100%"
        labelField="@title"
        right="0" bottom="0" left="0" top="10"           
        doubleClickEnabled="true"
        maxHorizontalScrollPosition="250"
        horizontalScrollPolicy="auto"
        dragEnabled="true"
        dropEnabled="true"
        dataProvider="{model.dataHolder}"
        />

Вам не нужен идентификатор для инъекции, вы можете ввести по типу, просто удалите идентификаторы из тега инъекции и конфигурации для модели.

person kuroiryu42    schedule 23.08.2011
comment
Думаю, я запутал вас. Мне нужно было внедрить модель в CustomTree, а не в компонент MXML. У меня есть класс CustomTree.as внутри этого класса я выполняю какие-то действия с моделью. Затем я использовал CustomTree в mxml. И да, я знаю, что могу вводить без id. Но спасибо за информацию. - person nkukhar; 24.08.2011