JSFL для ... в цикле, кажется, не работает - PullRequest
0 голосов
/ 09 июля 2011

Я пишу скрипт в JSFL для Flash CS5 и пытаюсь получить список слоев за пределами основной временной шкалы. Я получаю временную шкалу, затем перебираю все это с помощью цикла for ... in, но объекты, которые я получаю, кажутся неопределенными. Вот некоторый тестовый код, который я сделал:

alert(fl.getDocumentDOM().getTimeline().layers[0].name); //Returns "text1"

for(layer in fl.getDocumentDOM().getTimeline().layers) {
    alert(layer.name); //Returns "undefined"
}

Итак, JSFL не поддерживает ... in? Это немного странно, так как кажется, что это просто движок JavaScript.

Ответы [ 2 ]

5 голосов
/ 21 октября 2011

Вы никогда не должны зацикливаться на массиве, используя for..in, так как он предназначен для перечисления объектов.Все, что нужно, - это чтобы другой скрипт изменил Array.prototype и ваши for..in перерывы (если вы мне не верите, расширьте Object.prototype и посмотрите, как Adobe IK Tool начнет выплевывать ошибки!)

Самый простой способ зацикливания массивов в JSFL (который использует движок Spidermonkey JavaScript):

for each(var layer in layers)
{
    fl.trace(layer.name);
}

PS.@cwallenpole.Модификация выбора "непредсказуемость", о которой вы говорите, является нормальным поведением: http://help.adobe.com/en_US/flash/cs/extend/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7f91.html

5 голосов
/ 09 июля 2011

Ух ты там.JSFL - это не просто движок JavaScript, это странный мир JavaScript, который может быть удивительно непредсказуемым.Не веришь мне?Не уверен, что это все еще так, но попробуйте fl.getDocumentDOM().selection.push(<obj>).Это не сработало, но это сработало: var s = fl.getDocumentDOM().selection; s.push(<obj>) fl.getDocumentDOM().selection = s.

Тем не менее, ваш синтаксис отключен:

var layers = fl.getDocumentDOM().getTimeline().layers;
// include 'var' it's good taste
for(var layer in layers) {
    // for... in iterates the KEYS, so you actually have to do a lookup
    alert(layers[layer].name);
}

Кстати, вам лучше перебирать массивы счисловые индексы, это понятнее и быстрее.

...