0
define(["dojo/_base/declare"], function (declare) {
    // module:
    //      StyleNames
    // summary:
    //      Style element names.
    var StyleNames = declare(null, 
        {
            PROP1: "Style1",
            PROP2: "Style2"
        }
    );

    StyleNames.dataContexts = [
        StyleNames.PROP1,
        StyleNames.PROP2,
    ];

    return StyleNames;
});

var styleNames = new StyleNames();
console.log("PROP1 is defined as: ", styleNames.PROP1); // prints "Style1"
console.log("dataContexts is undefined: ", styleNames.dataContexts); // Error: styleNames.dataContexts is undefined

私のセットアップはhttps://stackoverflow.com/a/11329956/1610451に似ていましたが、DOM を見ると、styleNames.constructor.dataContexts未定義の値を持つコンストラクターに設定されていることがわかります。

バックストーリー: ActionScript コードを JavaScript に移植していて、既存のインターフェイスを維持する必要があります。私が移植している ActionScript コードの例は次のとおりです。

public class StyleNames {
    public static const PROP1 : String = "Style1";
    public static const PROP2 : String = "Style2";

    public static const dataContexts : Array = [
        PROP1,
        PROP2
    ];

    public function StyleNames(){}
}
4

2 に答える 2

0

これは、私の考え方で正しく行われる方法です。

require(["dojo/_base/declare"], function(declare) {

    var StyleNames = declare(null, {

        constructor: function() {
            // a.k.a public function StyleNames(){}
        },

        // non-static properties and functions here

    });

    // static properties and functions
    StyleNames.PROP1 = "Style1";
    StyleNames.PROP2 = "Style2";

    StyleNames.dataContexts = [
        StyleNames.PROP1,
        StyleNames.PROP2
    ];

    console.log("PROP1: ", StyleNames.PROP1);
    console.log("dataContexts: ", StyleNames.dataContexts);

});​

jsFiddle で実際の例を参照してください: http://jsfiddle.net/phusick/6nfhJ/

于 2012-08-20T09:06:44.737 に答える
0

あなたは宣言でそれを正しく持っています。私の意見では、これが静的変数を定義する最も明確な方法です。あなたのconsole.logコードでは、dataContexts変数を正しく参照していません。これは静的変数であるため、どのインスタンスにも属しません。このように参照したい: StyleNames.dataContexts.

編集:構文エラーの可能性もあります。StyleNames.dataContexts宣言の下の 2 番目のコンマを取り出します。

StyleNames.dataContexts = [
    StyleNames.PROP1,
    StyleNames.PROP2
];

次のように変数にアクセスします。

StyleNames.dataContexts

またはとは対照的this.dataContextsinstanceRef.dataContexts

于 2012-08-19T21:35:22.870 に答える