因此,我已经成功地从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...
这是set函数istelf ...
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函数将调用本身的语言变量添加到此函数中,并且它始终相同。我在这里错过了一些基本原理吗?
非常感谢你的时间。
答案 0 :(得分:1)
如果您希望进行字符串比较,则需要使用引号,除非en是String变量,因为langHold是String,如:
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”或“address”,看它是否在到达断点时发生变化。
这是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();
答案 1 :(得分:1)
ShaunHusain使用Singleton的理论是我需要的完美解决方案。但是,他的代码给了我一个奇怪的1061错误,我的格式和代码似乎没有错误。无论如何,我查找了另一种使用Singleton的方法,如下所示对我来说非常合适。老实说,肖恩的代码应该适用于任何人,我不知道为什么不是。我完全愿意承认这可能是我最后的一个错字,我只是没有看到。
我最终在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;
}
}
}
这段代码允许我保存数据并从两个不同的类中再次调用它。这是一个非常黑客的工作,而不是仅仅能够将变量从函数传递给函数,但在我的情况下,我们没有创建此文件,我们正在修改它并尝试执行超出项目原始范围的事情。 / p>
再次感谢您的帮助肖恩!我希望这有助于其他人!