Возникла проблема с приведением объекта из ArrayCollection к экземпляру моего пользовательского класса. - PullRequest
3 голосов
/ 28 января 2011

Я использую Flex 4, и по какой-то причине я не могу заставить работать следующий код, который происходит внутри обработчика ListEvent для dataGrid:

_tempRule = DataGrid(event.currentTarget).selectedItem as Rule;

Правило - это пользовательский класс, а приведенный выше кодвсегда возвращает ноль.Поставщик данных для сетки данных представляет собой ArrayCollection.Если я попытаюсь обернуть вышеупомянутый код, чтобы он выглядел следующим образом:

DataGrid(event.currentTarget).selectedItem as Rule

Я получаю эту ошибку:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@e15a971 to com.mycompany.arcc.business.Rule

Теперь я знаю, что делал это раньше с нативными классами Flexкак кнопка, и т. д., но в моем случае это не будет работать.

Вот класс правил:

    package com.mycompaany.arcc.business
{
    import flash.utils.describeType;

    import mx.collections.ArrayCollection;

    [Bindable]
    public class Rule extends Object
    {
        public static const RANGE:String = "Range";
        public static const SINGLE:String = "Single";
        public static const LIST:String = "List";

        /*name of the rule*/
        private var _name:String;

        /*rule group, like a radio group, only 1 rule from a group can be selected*/
        private var _group:String;

        /*Description of the group for the rule*/
        private var _groupDescription:String;

        /*Description of the rule*/
        private var _description:String;

        /*arry of values for this rule, based on the control type*/
        private var _values:ArrayCollection;

        /*min num of values*/
        private var _numValues:int;

        /*type of control to build, if range, 2 inputs, single, 1 , list 1 or more*/
        private var _type:String;

        public function Rule(name:String=null, group:String=null, description:String=null, values:ArrayCollection=null, numValues:int=0, type:String=null)
        {
            super();
            _values = new ArrayCollection();

            this._name = name
            this._group = group;  
            this._description = description;
            if (values)
            {
                this._values = values;
            }
            this._numValues = numValues;  
            this._type = type;  
        }


    }
}

Так чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Быстрое и простое решение состояло в том, чтобы добавить метатег [RemoteClass] вверху моего пользовательского класса. Я нашел это решение на веб-сайте Adobe, aliveocs.adobe.com / flex / 3 / html /…. Кажется, что использование встроенных возможностей перетаскивания между компонентами на основе списка приводит к потере их типа пользовательскими классами во время копирования. Спасибо всем за помощь.

1 голос
/ 28 января 2011

сообщение об ошибке является результатом неудачного приведения.Лучше всего использовать приведение вот так:

Rule((event.currentTarget).selectedItem);

В этом случае вы получите исключение, когда приведение не выполнено, а не нулевая ссылка

...