Actionscript 3 - цикл через GridItems, когда у меня есть имя / идентификатор - PullRequest
1 голос
/ 01 декабря 2011

Я новичок в Actionscript 3 и у меня есть вопрос о Grid, GridRow и GridItem. У меня есть сетка 3 х 3. 3 ряда, 3 столбца. Я могу поставить идентификатор или имя на объекты GridItem и сделал это. Как я могу пройти через это? Вот сетка:

    <mx:Script>
<![CDATA[
    import mx.containers.GridItem;
    public function init():void {

            griditem0.setStyle("borderStyle","solid");
            griditem0.setStyle("borderThickness",3);
    /* want to loop here */         
    }
]]>
  </mx:Script>

<mx:Grid id="myGrid" x="77" y="59" visible="true" width="300" backgroundColor="#F50F45" height="300">
    <mx:GridRow id="row1" width="100%" height="100%">
        <mx:GridItem id="griditem0"   width="100%" height="100%" >
        </mx:GridItem>
        <mx:GridItem id="griditem1"   width="100%" height="100%" >
        </mx:GridItem>
        <mx:GridItem id="griditem2"  width="100%" height="100%" >
        </mx:GridItem>
    </mx:GridRow>
    <mx:GridRow id="row2" width="100%" height="100%">
        <mx:GridItem width="100%" id="griditem3"  height="100%" >
        </mx:GridItem>
        <mx:GridItem width="100%" id="griditem4"  height="100%" >
        </mx:GridItem>
        <mx:GridItem width="100%" id="griditem5"  height="100%" >
        </mx:GridItem>
    </mx:GridRow>
    <mx:GridRow id="row3" width="100%" height="100%">
        <mx:GridItem width="100%" id="griditem6"  height="100%" >
        </mx:GridItem>
        <mx:GridItem width="100%" id="griditem7"  height="100%" >
        </mx:GridItem>
        <mx:GridItem width="100%" id="griditem8"  height="100%" >
        </mx:GridItem>
    </mx:GridRow>
</mx:Grid>

Я пытался зацикливаться, используя массив для хранения идентификаторов или имен, и используя родительский контейнер, который является строкой для получения дочерних элементов, но, поскольку у меня есть имя / идентификатор, кажется, что это должно быть проще, чем это. Я попытался объединить "griditem" с индексом цикла, но это не сработало. Есть идеи? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Спасибо за ввод.Я пытался использовать это: (с этого сайта)

public static function getGrandChildByName(
     parent : DisplayObjectContainer,
     child : String,
     grandchild : String) : DisplayObject {
var child_obj : DisplayObject = parent.getChildByName(child);
var child_container : DisplayObjectContainer = child_obj as DisplayObjectContainer;
return child_container.getChildByName(grandchild);
}

Я пишу пользовательский компонент и добавляю сетку, затем 5 строк сетки, затем 5 элементов (элементов сетки) на строку.Я установил стили для элементов сетки и т. Д., И они отображаются нормально. Я хочу разрешить пользователю обновлять стили, скажем, изменять цвет фона элемента сетки или толщину границ - такие вещи.Когда я создаю каждую строку сетки и элемент сетки, я вставляю имя для каждого.Для Grid Row это «строка» с номером строки, например: «row0», «row1» и т. Д. Для элементов сетки назначенное имя выглядит следующим образом: «item00», «item01» и т. Д.«элемент» объединяется с номером строки и столбца.Процедура работает нормально до возвращения.Кажется, всегда возвращать ноль.Я прослеживаю имена строк и элементов, когда они назначены, и это выглядит нормально. Для выполнения setStyle, я думаю, мне нужно будет привести результат в виде GridItem, пока не знаю об этом.Я просто хотел бы не получить ноль от рутины.Я могу обновить заголовок сетки и изменить ее стиль без каких-либо проблем.Это просто внуки сетки (gridItems), которая дает мне проблему.Я надеюсь это имеет смысл.Спасибо!

0 голосов
/ 01 декабря 2011

К сожалению, mx.containers.Grid не имеет атрибута 'children' и не предоставляет прямого доступа к GridItems.По-видимому, это было сделано намеренно, потому что единственный путь к GridItems через Grid - myGrid.layoutObject.target.createdComponents[0].createdComponents[0].Однако layoutObject защищен, поэтому, хотя вы можете поместить Watch в это выражение, вы не сможете получить к нему прямой доступ.

Лучший способ, который я могу придумать, похож на то, что вы уже сделали.

for(var i:int=0;i<8;i++){
    var gridItem:GridItem = this['griditem'+String(i)];
    trace(gridItem.colSpan);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...