就像我以为我理解 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
时,为什么第二个返回?var page
编辑
所以我错误地认为这是一个范围问题,但这取决于 AMD 的异步特性。
如何在没有 while 循环检查未定义的情况下以相同的方法返回 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;
});