вызвать встроенную функцию и передать текущий элемент в качестве аргумента - Flex 3 - PullRequest
2 голосов
/ 08 июня 2010

Я пытаюсь создать цикл элементов вроде этого ...

    for each (var btn:Object in ViewButtonData)
    {
      // build element
      var box:HBox = new HBox();
      box.styleName = "lefttab";
      box.width = "100%";
      box.addEventListener("rollOver", HoverTab(btn.id, 1));
      box.addEventListener("rollOut", HoverTab(btn.id, 0));

      // add element to list
    }

Я хотел бы передать текущий HBox в функцию 'HoverTab'.Есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 09 июня 2010

Комментарий Джеймса Уорда верен.Вы можете просто сделать:

function myHandler(event:Event):void {
    var myHBox:HBox = event.currentTarget as HBox;
}

Тем не менее, ответ на ваш вопрос:

box.addEventListener("rollOver", function(e:Event) { HoverTab(box, btn.id, 1); });

.. распределен для большей читаемости:

box.addEventListener("rollOver", 
                     function(e:Event) { 
                         HoverTab(box, btn.id, 1); 
                     }
                    );
1 голос
/ 09 июня 2010
box.addEventListener("rollOver", hoverTab(btn.id, 1));
box.addEventListener("rollOut", hoverTab(btn.id, 0));

Это не будет работать, если hoverTab не является функцией, которая возвращает функцию, которая принимает событие в качестве единственного аргумента.Замените его на:

box.addEventListener("rollOver", hoverTab);
box.addEventListener("rollOut", rollOutTab);

И, как упоминал Джеймс, вы получите HBox из event.currentTarget

function hoverTab(event:MouseEvent):void
{
   var box:HBox = HBox(event.currentTarget);
}

Чтобы получить btn.id внутри hoverTab, храните HBoxesи btn.ids в два массива из цикла for-each.Теперь вы можете получить индекс HBox, используя метод indexOf - btn.id будет иметь тот же индекс в своем массиве.

var boxes:Array = [];
var ids:Array = [];
for each (var btn:Object in ViewButtonData)
{
  // build element
  var box:HBox = new HBox();
  boxes.push(box);
  ids.push(btn.id);
  box.addEventListener(MouseEvent.ROLL_OVER, hoverTab);
  box.addEventListener(MouseEvent.ROLL_OUT, rollOutTab);

  // add element to list
}
function hoverTab(event:MouseEvent):void
{
   var box:HBox = HBox(event.currentTarget);
   var btnid:Number = ids[boxes.indexOf(box)];
}

В качестве альтернативы (поскольку ActionScript допускает использование разных типов в одном массиве), вы можете вставить их в тот же массив и прочитать btn.id как array[array.indexOf(box) + 1]

1 голос
/ 08 июня 2010

HBox должен автоматически быть доступен в обработчике события через event.currentTarget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...