2011-07-09 28 views
0

我正在爲Flash CS5編寫JSFL中的腳本,並試圖從主時間軸上獲取圖層列表。我得到時間線,然後循環遍歷所有的for ... in循環,但我得到的對象似乎是未定義的。這裏是我製作的一些測試代碼:JSFL for ...在循環中似乎不起作用

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

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

那麼,JSFL不支持... in嗎?這有點奇怪,因爲它似乎只是一個JavaScript引擎。

回答

5

Whoooh there。 JSFL不僅僅是一個JavaScript引擎,它可能是非常不可預知的bizarro world 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); 
} 

順便說一句,你最好通過迭代與數字索引陣列,更直觀和快捷。

4

您不應該使用for..in循環數組,因爲它是爲Object枚舉設計的。只需要另一個腳本修改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