Edit: Doh, ха-ха, я только что перечитал комментарий выше, и этот метод на самом деле является вторым предложением, которое он сделал, я немного хотел попробовать его первые предложения и потерпел неудачу ... о, хорошо, яЯ оставлю этот оригинальный комментарий здесь, потому что он объясняет, почему первое предложение не будет работать, а второе работает ...
Хорошо, поэтому ваше объяснение обоснованно, но ваше решение не работаетработа ... Вот почему:
вы сказали добавить свойство в мувиклип, которое содержит значение «commName», чтобы устранить проблему со ссылочной переменной, что и нужно (хотя «commName» только что назначензначение "mc.name", чтобы вы могли просто использовать вместо него "mc.name"), но проблема со ссылками все еще существует, потому что мы находимся в цикле for ...
for each (var mc:MovieClip in mcCommunities)...
Так что "mc"все еще рассматривается как ссылочная переменная, и мы все еще получаем те же самые нежелательные результаты (каждое событие объекта действует так, как если бы оно было нажатием последнего объекта в строке ...)
Так как же это исправить ...Ну что яв конечном итоге я сделал замену «для каждого» на «для» (var i: int ...) и захват «mc» с помощью метода «getObjectAt (i)», который сначала я думал, что будет работать, но оказалось, что мы все ещеесть переменная, которая действует как ссылка, и на этот раз она была «i: int» в итерации ... так что это:
for (var i:int = 0; i < mcCommunities.numChildren; i++) {
MovieClip(mcCommunities.getChildAt(i)).name); ...
, где mcCommunities.numChildren равен 3 (0,1,2), вызваноi равняется 3 (недопустимый индекс), когда цикл завершается, и везде я установил «MovieClip (mcCommunities.getChildAt (i)). name);», прежде чем теперь рука имела 3 в качестве значения для i ... фрустрация
Итак, окончательное рабочее решение было следующим:
function displayCommunity(e:Event) {
for (var i = 0; i < mcCommunityHolder.numChildren; i++) {
mcCommunityHolder.removeChild(mcCommunityHolder.getChildAt(i));
}
mcCommunityHolder.alpha = 0;
mcCommunityHolder.visible = true;
mcCommunityHolder.addChild(e.currentTarget.content);
TweenLite.to(mcCommunityHolder, 1, {alpha:1, easing:Elastic.easeOut});
for (var j:int = 0; j < mcCommunities.numChildren; j++) {
assignListeners(MovieClip(mcCommunityHolder.getChildAt(mcCommunityHolder.numChildren - 1)), MovieClip(mcCommunities.getChildAt(j)).name);
}
}
function assignListeners(newClip:MovieClip, commName:String) {
newClip.addEventListener(commName + "_btnMap", function(e:Event) { trace("clicked: " + commName); viewLotmap(commName); });
newClip.addEventListener(commName + "_btnLocation", function(e:Event) { trace("clicked: " + commName); viewLocationmap(commName); });
newClip.addEventListener(commName + "_btnAriel", function(e:Event) { trace("clicked: " + commName); arielPhotos(commName); });
newClip.addEventListener(commName + "_btnRegister", function(e:Event) { trace("clicked: " + commName); communityRegister(commName); });
}
Что я сделал, так это вынул назначение eventListeners и поместил его в функцию, так что теперь везде, гдевызывал ссылочную переменную, прежде чем теперь назначался через параметры функции, которые находятся только в области действия самой функции, поэтому каждый раз, когда вы вызываете ее, вы можете быть уверены, что значения будут теми, что вы отправили;) удовлетворение
ЛюбойКак, спасибо, что указали мне в правильном направлении, я теперь обернул голову вокруг этого, и я могу найти другую, кажущуюся нелогичной проблему, чтобы вырвать мои волосы:)
Peace