Создание динамически гибкого настраиваемого объекта ItemRender (конструктор)

я создаю некоторый Advanced Datagrid с ActionScript.

Я создал класс ActionScript, в котором я расширяю объект VBox:

ядро пакета {import mx.containers.VBox; import mx.controls.TextInput;

открытый класс customItemRender расширяет VBox {общедоступная функция customItemRender (_TextInput: TextInput, _TextInput2: TextInput) {// TODO: реализовать функцию super.addChild (_TextInput); super.addChild (_TextInput2);
}}}

Проблема возникает, когда я объявляю свойство de itemrender в сетке данных:

AdvancedDataGridColumn.itemRenderer = new ClassFactory (customItemRender (_TextInput1, _TextInput2));

Компилятор не позволит мне создать экземпляр customItemRender.

Кто-нибудь знает, есть ли альтернативное решение проблемы?

Заранее спасибо за помощь,

С уважением, Хавьер


person Community    schedule 04.09.2009    source источник


Ответы (3)


частный var _ItemRendere: ClassFactory;

private function get MyItemRendere():ClassFactory
{
    if (_ItemRendere == null)
    {
        _ItemRendere = new ClassFactory();
        _ItemRendere.generator = customItemRender;
        _ItemRendere.properties = {
            _TextInput1:MY_TextInput1_OBJECT, 
            _TextInput2:MY_TextInput2_OBJECT
                };
    }
    return _ItemRendere;
 }

тогда вы можете использовать

AdvancedDataGridColumn.itemRenderer = MyItemRendere;
person Mohamed Hassan    schedule 09.02.2010

Я только пробовал сделать это с помощью MXML. В этом случае мне обычно приходится заключать экземпляр IListItemRenderer в теги mx: Component. Я не совсем уверен, что происходит программно, когда я это делаю, но это работает. Причина в том, что itemRender на самом деле ищет экземпляр IFactory, а не экземпляр, поэтому я предполагаю, что делать это строго с использованием AS, вам нужно будет создать свою собственную реализацию IFactory.

e.g.

<mx:List>
 <mx:itemRenderer>
  <mx:Component>
   <mx:Text />
  </mx:Component>
 </mx:itemRenderer>
</mx:List>
person Mims H. Wright    schedule 04.09.2009
comment
Привет, я знаю, как использовать его с тегами MX, как вы уже сказали, сначала используйте тег компонента, но мой вопрос в том, как это сделать в as3. С Уважением - person ; 07.09.2009

Конструктор ClassFactory имеет класс как параметр, а не экземпляр. Вам необходимо позвонить:

new ClassFactory(customItemRender);

и не:

new ClassFactory(new customItemRender(_TextInput1,_TextInput2));

or:

new ClassFactory(customItemRender(_TextInput1,_TextInput2));

Теперь, поскольку конструктор не будет вызываться со ссылкой на TextInput1 и TextInput2, вам необходимо создать экземпляры ваших собственных TextInput в самом настраиваемом средстве визуализации. (Но это хорошо, если вы продолжите вызывать новый customItemRender (_TextInput1, _TextInput2), тогда два TextInput будут добавлены только в ПОСЛЕДНИЙ экземпляр customItemRender, а у всех остальных не будет этих двух объектов).

person cwallenpoole    schedule 24.09.2009