2016-01-23 50 views
2

我目前正在設計一個網站,該網站旨在同時顯示多個畫布,但不知道它將提前顯示哪些畫布(PHP腳本創建列表)。EaselJS中的動態舞臺名稱

這個想法是讓多個腳本文件(每個畫布一個)通過(通常)單個處理程序來讀取,該處理程序將填充各個階段。

stage = new createjs.Stage(context); 

我被困在這裏。當我創建一個給定的舞臺時,我知道我想要將它附加到的畫布的名稱(例如,stageA),並且它在名爲context的變量的JavaScript中可用。在這種情況下,我需要創建一個名爲stageA的畫架階段;問題是我不能提前知道我不需要stageB而不是stageA,所以創建的階段名稱需要是動態的(等同於上下文)。我試着沿

eval(context) = new createjs.Stage(context); 

線的東西,但它不工作不變。

(我還需要能夠在這個動態命名階段工作,即可以做到

stageA.update(); 

例如,不知道STAGEA被稱爲STAGEA只是基於上下文。)

有什麼建議嗎?

回答

2

您可以使用括號標記爲全局變量或者windows["stageA"]或者,如果你知道你是在全球範圍內this["stageA"]

所以,如果你有在全球範圍內的上下文,你必須與它的變量名的字符串,那麼你可以通過括號記號訪問它像這樣

var stageA = // context of canvas 
var stageName = "stageA" 
var theStage = window[stageName]; 

現在theStage引用stageA

theStage.clearRect(0,0,100,100); 
// same as 
stageA.clearRect(0,0,100,100); 

所有對象屬性可以通過任一點符號window.alert託槽符號window["alert"]進行訪問。由於大括號表示法需要一個字符串,因此可以在其位置使用一個變量。

又如

var myObj = { 
     attributeA : 10, 
    } 
    console.log(myObj.attributeA); // output 10; 
    console.log(myObj["attributeA"]); // output 10; 
    var attributeName = "attributeA"; 
    console.log(myObj[attributeName]); // output 10; 

在全球範圍內被稱爲window但大多數人放下車窗直接引用全局範圍。 EG window.alert相同alertwindow.requestAnimationFrame相同​​

在全球範圍內也被稱爲this,但你需要知道你是在全球範圍內。如果你有信心,那麼this["alert"]window["alert"]alertwindow.alertthis.alert都是相同的參考,如果你在全球範圍內。

+0

非常感謝,這非常有幫助。現在,在[this]的道路上停留了一段時間(http://stackoverflow.com/questions/34969195/targetting-multiple-stages-children-by-name-in-easeljs)。 (會在評論中提問,但最終會佔用太多空間。) – takaminacchan