我正在使用actionscript 3.0和Flash Professional CS5.5 我遇到了第一帧不在的实例对象的问题。 我的第一帧是菜单,第二帧包含TLF文本字段。 我给文本字段一个实例名称,让我们说“username_txt”。 现在,如果我关闭“自动声明舞台实例”并在我的主类
中执行此操作 public class MainClass extends MovieClip {
public var username_txt:TLFTextField;
public function MainClass() {
username_txt.text = "anything";
}
}
我将收到一个运行时错误,指出我尝试访问null对象的属性。 (我已经导入了所有必要的类,所以这不是问题)
当我将文本放在第一帧中时,这不会发生。
任何帮助?
提前致谢
答案 0 :(得分:1)
由于文本字段尚未实例化,因为尚未到达框架,我不确定是否有一种优雅的方式来执行此任务。
或许更好的模式是将数据模型与视图分离。
创建一个单例类来存储数据:
package
{
public class ApplicationModel
{
/** Singleton instance. */
private static var instance:ApplicationModel = new ApplicationModel();
/** Return singleton instance. */
public static function getInstance():ApplicationModel
{
return instance;
}
/** Data Model */
public var username:String;
/** Constructor as singleton enforcer */
public function ApplicationModel()
{
if (instance)
throw new Error("ApplicationModel is a singleton and can only be accessed through ApplicationModel.getInstance()");
}
}
}
然后,从关键帧或类的任何位置,您可以获取对象的实例,实现方式如下:
ApplicationModel.getInstance().username = "test";
或者更好的做法是:
var applicationModel:ApplicationModel = ApplicationModel.getInstance();
applicationModel.username = "test";
根据你的例子:
public class MainClass extends MovieClip {
public var username_txt:TLFTextField;
public function MainClass() {
ApplicationModel.getInstance().username = "anything";
}
}
然后,在框架上需要更新TLFTextField(第2帧的框架脚本),您可以根据模型设置文本:
username_txt.text = ApplicationModel.getInstance().username
您的视图将始终在需要时更新。