思った通り、JSのスコープを理解した...
次のコードを使用します。
function init() {
var page;
var pageName = $('body').data('page');
switch(pageName) {
// (there are more switch cases here normally...)
case 'pSearchLatest':
require(['searchresults'], function (SearchResults) {
page = new SearchResults().init();
console.log(page); // <- shows the object!
});
default:
break;
}
console.log(page); // <- undefined
return page;
}
コンソール ログのコメントを参照してください。が switch ステートメントのスコープ外で宣言されているundefined
場合、2 番目が返されるのはなぜですか?var page
編集
したがって、これはスコープの問題だと誤って考えていましたが、AMD の非同期性によるものです。
while ループで undefined をチェックせずに、同じメソッドの require スコープで page の値を返すにはどうすればよいですか?
編集2
私はこのようにしました:
function init(callback) {
case 'pSearchLatest':
require(['searchresults'], function (SearchResults) {
page = new SearchResults().init();
callback(page)
});
}
そして、ラッピング init() メソッドを呼び出す私のページで:
new PageController().init(function(asyncViewController) {
App.view = asyncViewController;
});