Aufbauend auf voidstate's und Dzulqarnain Nasir's Antworten, hier ist der Code, den ich an meinem Projekt am Ende mit.
Der Teil, der mich am meisten stolperte war, dass FB.init()
scheinbar asynchron ist. Bei dem Versuch, die callback()
(ohne FB.getLoginStatus
), FB
wurde noch nicht initialisiert, und ich bekam "An active access token must be used to query information about the current user.
" Fehler.
RequireJS Shim 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 Modul 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);
}
};
});
Diese noch initialisieren nicht ganz die ursprüngliche Frage der gewünschten Nutzung adressieren.
Code des OP vielleicht neu geschrieben werden können als:
require(['libs/facebook/fb'], // where fb.js holds my above Module
function(FBinit){
FBinit({
appId: appId,
channelUrl: channelUrl
}, function(){
FB.api("/me", function(){});
});
}
);
Das ist nicht ganz so cleanas ursprüngliche Konzept des OP, aber es ist das Beste, was ich herausfinden konnte. Wenn jemand welche hat, würde ich gerne Feedback oder Ratschläge dazu bekommen, wie ich meinen Ansatz verbessern kann. Ich bin immer noch sehr neu in RequireJS. Hier
Sieht aus wie Facebook diese schließlich angesprochen hat, ihre Lösung für einige ziemlich ähnlich sieht aus die Antworten auf diese Frage. https://developers.facebook.com/docs/howto/javascript/requirejs/ – the0ther