flex 3 перебирает значения объекта - PullRequest
5 голосов
/ 23 марта 2009

У меня есть объект, который представляет таблицу базы данных. Я хочу перебрать этот объект и напечатать печать каждого значения. Что я могу использовать, чтобы сделать это?

Я хочу сделать это внутри моего mxml, а не Actionscript

для каждого атрибута объекта я хочу создать поле ввода

Ответы [ 4 ]

12 голосов
/ 23 марта 2009

Посмотрите документацию по Flex 3 looping. Если вы это сделаете, вы найдете это:

for..in

Цикл for..in перебирает свойства объекта или элементов массива. Например, вы можете использовать цикл for..in для итерации по свойствам универсального объекта (свойства объекта не хранятся в каком-либо определенном порядке, поэтому свойства могут отображаться в случайном порядке):

var myObj:Object = {x:20, y:30};
for (var i:String in myObj)
{
    trace(i + ": " + myObj[i]);
}
// output:
// x: 20
// y: 30

Вместо того, чтобы пытаться создать поле ввода для каждого объекта, я бы посоветовал вам взглянуть на DataGrid и пользовательские ItemEditors .

4 голосов
/ 30 июля 2009

Я согласен, что этот ответ бесполезен. Работает только с общими объектами, не объявленными пользователем объекты.

Тем не менее, вот некоторый код, который должен / мог бы работать с использованием descriptionType, как предложено выше. (И я не думаю, что это слишком сложно). Помните, что доступны только общедоступные свойства / методы и т. Д .:

var ct:CustomObject = new CustomObject(); 
var xml:XML = describeType(ct);
for each(var accessor in xml..accessor) {
  var name:String = accessor.@name;
  var type.String = accessor.@type;
  trace(ct[name]);
}
2 голосов
/ 27 мая 2009

Проблема с "for ... in" заключается в том, что он выполняет итерации только для динамических свойств. То есть, если ваш объект определен как класс (а не динамически), «for..in» ничего не даст.

Документация ActionScript предлагает использовать descriptionType () для фиксированных свойств, но это выглядит слишком сложным для этой простой задачи ...

1 голос
/ 23 марта 2009

Вы можете написать это как actionscript, но включить его в файл mxml с тегом script:

<mx:Script>
   <![CDATA[
       public function LoopAndPrint() : void
       {
           //your code here
       }
   ]]>
 </mx:Script> 
...