1

YUI3 でオブジェクトの名前空間を作成してインスタンス化する方法がわかりません。以下の例では、YUI3 モジュールを作成し、それを YUI.use メソッドにロードして、名前空間を使用してオブジェクトをインスタンス化しようとしています。これは機能しませんが、誰かが理由を指摘できますか? 新しいオブジェクトをインスタンス化しようとすると、「オブジェクトは関数ではありません」というエラーが表示されます。

test-module.js

YUI.add('test-module', function(Y){ 
var TestModule = {
    url: '',        

    /* Example function */
    doExample: function(){          
        console.log("doExample called");        
        }
}
// expose this back to the Y object
Y.namespace('SANDBOX.Test').TestModule = TestModule;
}, 1.0, {requires:['node']});

index.html

YUI({
    modules:{
        'test-module': {
            fullpath: 'js/test-module.js',
            requires: ['node']
        }
    }
}).use('test-module', function(Y){
    var testModule = new Y.SANDBOX.Test.TestModule(); //this throws the error
    testModule.doExample();
});
4

1 に答える 1

3

コードの問題(例外をスローすると言う場合)は、プレーンオブジェクトでnew()を使用していることです。これはコンストラクター関数ではありません。

行を変更します

var testModule = new Y.SANDBOX.Test.TestModule(); //this throws the error

にとって

var testModule = Y.SANDBOX.Test.TestModule; //this doesn't throw the error

オブジェクトのインスタンス化に関しては、通常のJavascriptと同じです。

var f = function(){
    //This is the constructor
}
f.prototype.myfunction = function(){
    //this is a function
}

また、それらのベースオブジェクトを使用して、独自のカスタムオブジェクトを作成することもできます。

var x = Y.Base.create('ClassIdentifier', |Base object to extend from|, [Extensions], {
    //content of the object, functions, etc
}, {
    ATTRS: {
        |attributes goes here|
    }
};
Y.namespace('mynamespcae').X = x;

次に、次のことができます。

var xInstance = new Y.mynamespace.X();

作成については、http: //yuilibrary.com/yui/docs/base/を参照してください。具体的には、http://yuilibrary.com/yui/docs/base/#createを参照してください。

于 2012-09-28T17:46:08.597 に答える