2016-01-23 80 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