因此,我成功地从XML文档中获取了一个值,并将其设置到一个名为"AddCommas"的单独类中。跟踪函数向我展示了它的正确设置。
要了解更多细节,我的目标是获取语言指标(法语为"fr",英语为"en"),将其设置在适当的类中,并将其设置为我将使用的变量。现在,我在if语句中使用这个变量;这将帮助我根据客户的请求正确格式化数字(逗号、小数、空格)。
然而,我的问题是,当我试图获得使用它的值时,它总是返回为Null。我已经在我的程序中放置了跟踪,试图确定何时发生这种情况,但我找不到。。。
从XML文件拉入集合(这很好,但我添加它是为了您的利益,以防我遗漏了什么)
public var commaHold = new AddCommas();
localLanguage = xmlObj.localLanguage;
trace("localLanguage + " + localLanguage);
commaHold.setLanguage(localLanguage); // Set Language
//More code follows...
这是集合函数本身。。。
public function setLanguage(localLanguage:String){
langHold = localLanguage;
trace("Set Language = " + langHold); //This always shows a successful set
}
现在,我错误地认为,在AS3中,一旦我的AddCommas类中的langHold被设置,我就应该能够使用它,而无需在我使用If语句的函数中调用get,对吧?像这样?
var language = langHold;
if (language == "en"){
trace("Language is = " + language); // More code follows afterwards and as of now, this shows NULL
现在,我已经尝试了很多Get函数来将调用中的语言变量添加到这个函数中,而且它总是一样的。我是不是遗漏了一些基本知识?
非常感谢您抽出时间。
如果您希望进行字符串比较,则需要使用引号,除非en是字符串变量,因为langHold是字符串,例如:
if (language == "en"){
考虑修改set函数以使用as3关键字,如:
private var _language:String;
public function set language(value:String):void {
_language = value;
//do other stuff here if necessary, put a breakpoint on the line above
}
public function get language():String{
return _language;
//put a breakpoint on the line above
}
您应该能够看到类的任何实例何时更改了属性。我唯一能想到的另一个问题是,它不是类的同一实例,因此不共享您之前设置的属性值。在调试器中,您可以检查它为此显示的"hashCode"或"地址",以查看它在遇到断点时是否发生了更改。
以下是AS3中的Singleton结构示例(这些都放在一个文件中):
package com.shaunhusain.singletonExample
{
public class SingletonExample
{
private static var instance:SingletonExample;
public static function getIntance():SingletonExample
{
if( instance == null ) instance = new SingletonExample( new SingletonEnforcer() );
return instance;
}
/**
*
* @param se Blocks creation of new managers instead use static method getInstance
*/
public function SingletonExample(se:SingletonEnforcer)
{
}
}
}
internal class SingletonEnforcer {public function SingletonEnforcer(){}}
使用任何其他类中的这个共享实例看起来都是这样的:
private var singletonInstance:SingletonExample = SingletonExample.getInstance();
ShaunHusain使用Singleton的理论是我需要的完美解决方案。然而,他的代码给了我一个奇怪的1061错误,我的格式和代码似乎没有错误。无论如何,我找到了另一种使用Singleton的方法,如下所示,它非常适合我。老实说,Shaun的代码应该适用于任何人,我不知道为什么它不适用。我非常愿意承认,这可能是我这边的一个打字错误,我只是没有看到。
我最终在Singletons类中嵌入了Set和Get,并将其用作保存所需信息的中介。它运行得很好。
package chart {
import chart.*;
//
public class StaticInstance {
private static var instance:StaticInstance;
private static var allowInstantiation:Boolean;
private var language:String;
public static function getInstance():StaticInstance {
if (instance == null) {
allowInstantiation = true;
instance = new StaticInstance();
allowInstantiation = false;
}
return instance;
}
public function StaticInstance():void {
if (!allowInstantiation) {
throw new Error("Error: Instantiation failed: Use StaticInsance.getInstance() instead of new.");
}
}
public function setLanguage(_language:String):void{
language = _language;
trace("language set = " + language);
}
public function getLanguage():String{
return language;
}
}
}
这段代码允许我保存数据,并从两个不同的类再次调用它。这是一项非常艰巨的工作,而不仅仅是能够将变量从一个函数传递到另一个函数,但在我的情况下,我们没有创建这个文件,我们正在修改它,并试图做超出项目原始范围的事情。
再次感谢你的帮助,肖恩!我希望这能帮助其他人!