Я использую 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;
}
}
}
Так чего мне не хватает?