Basándose en voidstate's y Dzulqarnain Nasir's respuestas, aquí está el código que terminé usando en mi proyecto.
La parte que más me ha tropezado es que FB.init()
es aparentemente asíncrono. Al tratar de invocar el callback()
(sin FB.getLoginStatus
), FB
aún no se había inicializado y recibía los errores "An active access token must be used to query information about the current user.
".
RequireJS Calce Config
require.config({
// paths: { 'facebookSDK': '//connect.facebook.net/en_US/all/debug' }, // development
paths: { 'facebookSDK': '//connect.facebook.net/en_US/all' }, // production
shim: { 'facebookSDK': { exports: 'FB' } }
});
AMD Módulo Para inicializar Facebook JS SDK
define(['facebookSDK'], function (FB) {
'use strict';
return function (settings, callback) {
var args = {
appId: settings.appId,
channelUrl: settings.channelUrl,
status: true,
cookie: true,
xfbml: true
};
console.log('Calling FB.init:', args);
FB.init(args);
if (callback && typeof (callback) === "function") {
// callback() // does not work, FB.init() is not yet finished
FB.getLoginStatus(callback);
}
};
});
Esto todavía no acaba de dirección de uso deseado de la pregunta original. código
de OP tal vez podría ser reescrita como:
require(['libs/facebook/fb'], // where fb.js holds my above Module
function(FBinit){
FBinit({
appId: appId,
channelUrl: channelUrl
}, function(){
FB.api("/me", function(){});
});
}
);
Esto no es tan cleanas concepto original de OP, pero es el mejor que he podido averiguar. Si alguien tiene alguno, me gustaría recibir algunos comentarios o consejos sobre cómo mejorar mi enfoque. Todavía soy muy nuevo en RequireJS.
Parece que Facebook ha abordado finalmente esto, su solución es muy similar a algunos de las respuestas a esta pregunta. https://developers.facebook.com/docs/howto/javascript/requirejs/ – the0ther