1

そのため、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...

これは集合関数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関数を試して、呼び出し自体の言語変数をこの関数に追加しようとしましたが、それは常に同じです。ここでいくつかの基本が欠けていますか?

お時間をいただき、誠にありがとうございます。

4

2 に答える 2

1

文字列の比較が必要な場合は、引用符を使用する必要があります。ただし、langHoldは次のように文字列であるためenが文字列変数である場合を除きます。

if (language == "en"){

次のような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のシングルトン構造のサンプルを次に示します(これはすべて1つのファイルにまとめられています)。

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();
于 2012-12-03T22:59:04.647 に答える
1

シングルトンを使用するというShaunHusainの理論は、私が必要としていた完璧なソリューションでした。しかし、彼のコードは私に奇妙な1061エラーを与え、私のフォーマットとコードはエラーがないように見えました。とにかく、私はシングルトンを使用する別の方法を次のように調べました。これは私にとって完璧に機能しました。正直なところ、Shaunのコードは誰にでも機能するはずですが、なぜ機能しなかったのかわかりません。私は、私が見なかったのはおそらく私の側のタイプミスであったことを完全に認めたいと思います。

結局、Set and GetをSingletonsクラスに埋め込んで、必要な情報を保持するための仲介として使用しました。それは完璧に機能しました。

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;
        }
    }
}

このコードにより、データを保持し、2つの異なるクラスから再度呼び出すことができました。関数から関数に変数を渡すことができるのではなく、非常にハックの仕事ですが、私の場合、このファイルを作成しなかったので、ファイルを変更して、プロジェクトの元の範囲を超えて何かをしようとしています。

ショーン、ありがとうございました!これが他の人の役に立つことを願っています!

于 2012-12-05T17:27:39.030 に答える