【发布时间】:2012-12-06 18:09:56
【问题描述】:
是否可以在定义块中使用 require?
我正在尝试加载 facebook JS API,但需要将其包装在具有不同上下文的 require 中,因为如果 Facebook 被防火墙阻止,我不希望整个应用程序停止加载。
我遇到的问题是如何从嵌套的 require() 调用中返回模块。
我的代码如下所示:
define( [ 'require' ],
function( require )
{
var fbRequire = require(
{
context: 'fb',
waitSeconds: 3
} );
fbRequire.onError = function()
{
console.warn( 'fbRequire.onError', arguments );
};
fbRequire( [ 'https://connect.facebook.net/en_US/all/debug.js' ],
function()
{
console.log( 'facebook file now loaded' );
// init the Facebook JS SDK
var facebookSettings = {
channelUrl: '//' + window.location.hostname + '/facebook-channel.html', // Channel File for x-domain communication
status: true,
cookie: true,
xfbml: true,
appId: '1234567890'
};
FB.init( facebookSettings );
// this is the bit I'm confused about
// how do I...
return FB;
// ...because it's asynchronous and needs to be returned from the define() call?
} );
} );
这是一个 Dojo 项目,如果有帮助的话(我需要使用 dojo/Deferred 吗?)。
【问题讨论】:
-
使其成为依赖项不起作用吗?
-
我最初是这样写的,但是如果 Facebook 被阻止,整个应用程序就会崩溃,因为 require 会引发错误,然后不会加载任何其他内容。如果 Facebook 没有被阻止,它就可以正常工作。在不同的上下文中使用 require() 显然是答案。见:groups.google.com/forum/?fromgroups=#!topic/requirejs/…
-
尝试 catch the error 并将 Facebook 重新定义为本地化
标签: javascript dojo requirejs js-amd