以下のスニペットでは、testFunction()
YUI ブロック内にあるものにアクセスしようとしています。それを行う正しい方法は何ですか?
var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
function testFunction() {
console.log('Inside Function');
}
});
obj.testFunction();
以下のスニペットでは、testFunction()
YUI ブロック内にあるものにアクセスしようとしています。それを行う正しい方法は何ですか?
var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
function testFunction() {
console.log('Inside Function');
}
});
obj.testFunction();
あなたのコードは現在、2 つの理由で機能していません。
まず、宣言している testFunction 関数は表示されません。コードを次のように変更します
var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
Y.testFunction = function() {
console.log('Inside Function');
}
});
その部分を修正します。関数に渡された Y は YUI.use() から返されるため、Y に割り当てると可視になります。
2 つ目の問題は、YUI が必要なモジュールをロードする前に obj.testFunction() の呼び出しが発生するため、その時点で obj (YUI のインスタンス) に testFunction が含まれていないことです。上記のコードを変更すると、ブラウザー コンソールで obj.testFunction() を呼び出すことができるようになります。これは、その時点で読み込まれているためです。
最善の策は、testFunction をモジュールに配置し、そのモジュールを後のコードで使用することです。
YUI.add('testFunction', function (Y) {
Y.testFunction = function() {
console.log('Inside Function');
};
}, '1.0.0', {
requires: ['node', 'event', 'io-base', 'json-parse']
});
var obj = YUI().use('testFunction', function(Y){
Y.testFunction();
});