我正在使用Flash CS3和ActionScript 2.我有一个MovieClip符号(标识为“MySymbol”),其中包含一个标识符为“innerText”的动态文本块。使用以下“MySymbol.as”文件将该符号标记为“Export for ActionScript”:
class MySymbol extends MovieClip { function SetText(text) { innerText.text = text; } }
在框架操作中,我尝试执行以下操作:
var symInst = _root.attachMovie("MySymbol", "MySymbol" + _root.getNextHighestDepth(), _root.getNextHighestDepth()); symInst.SetText("hi"); // Fails symInst.innerText.text = "hi"; // Works
我收到编译错误:
There is no property with the name 'innerText'.
为什么我可以从帧动作中访问innerText,但不能在.as文件本身中引用它?
答案 0 :(得分:2)
您收到编译器错误,因为“innerText”在编译时不可用于该类(即运行时时可用)。
快速解决方法是使用
this['innerText'].text = text;
而不是
innerText.text = text;
答案 1 :(得分:1)
我猜测TextField“innerText”是使用Flash CS3中的Text工具创建的。如果是这种情况,那么编译器在某种程度上知道它,因为它需要从.FLA文件中获取有关它需要在舞台上创建哪些元素的信息,或者需要在库中放置哪些符号。
要从您的类中访问该属性,您需要在类中为它定义一个变量,即使它在技术上是该MovieClip的一部分。
尝试像这样修改你的课程:
class MySymbol extends MovieClip
{
private var innerText:TextField;
function SetText(text)
{
innerText.text = text;
}
}
通过在类中添加innerText的声明,编译器将确定它正在寻找什么,并假设该属性存在,就像使用this ['innerText']一样。 (虽然这仍然是访问该财产的有效方式。