2010-11-25 5 views
0

Je voudrais écrire mon premier plugin. jusqu'à présent, tout fonctionne. mais comment puis-je faire un retour variable? Je l'ai essayé avec une fonction de rappel, mais cela n'a pas vraiment fonctionné.jQuery: comment retourner les données d'un plugin

L'objectif final est de renvoyer une variable à partir d'un swf.

J'espère que c'est clair ce que je veux et n'importe qui peut aider.

acclame.

Voici mon code (par exemple):


    jQuery.crossXML = function(options, callback) { 
    // set default vars 
    var defaults = { 
     'xmlPath'  : false, 
     'method'  : 'init' 
    } 

    // extend defaults with custom options 
    var opts = $.extend({}, defaults, options); 

    //init swf 
    if(opts.method == 'init'){ 
     var flashvars = { 
      //currently not required 
     }; 
     var params = { 
      menu: "false", 
      allowScriptAccess:'always' 
     }; 
     var attributes = { 
      id: "mySWF", 
      name: "mySWF" 
     }; 

     var swfHeight,swfWidth; 

     if(opts.debug){ 
      swfHeight = "550"; 
      swfWidth = "400"; 
     }else{ 
      swfHeight = "1"; 
      swfWidth = "1"; 
     } 

     swfobject.embedSWF (opts.swf, opts.swfContainer, swfHeight, swfWidth, "9", "js/expressInstall.swf", flashvars, params, attributes); 
     swfobject.addLoadEvent(loadEventHandler); 

    } 

    //callback to get data from swf 
    function callSWF(var) { 
     var flash = getMovie('mySWF'); 
     flash.callSWF(var); 
    } 

    if(opts.method == 'call') 
     callSWF(opts.myVAR); 
} 

//executed by flash to get data 
function getDataFromSWF(swfDATA) { 
    alert(swfDATA);/*#################### this, I would like to have as a return #########*/ 
} 

//get flash-object for calback 
function getMovie(movieName) { 
    return document.getElementById(movieName); 
} 
+0

Ce n'est pas réellement un plug-in. – SLaks

+1

ouais il n'y a pas de plugin jq ici! – redsquare

+1

alors, qu'est-ce que c'est? – phase

Répondre

0

Eh bien, mon approche serait d'attacher des données à l'élément spécifique (dans ce cas - là où votre swf est contenu)

var elem = $("#SQFdiv").eq(0); 
jQuery.data(elem, "swfDATAField1", { myVal: swfDATA }); 

EDIT:

$(elem).data("swfDATAField1", myObjData); //preferred method 
+0

ah ok, merci pour l'approche. mais apparemment je n'ai pas écrit un vrai plugin. Je vais réviser tout cela et peut-être cela fonctionnera aussi avec le CallBack – phase

+0

'$ (" # SQFdiv "). First()' – SLaks

+0

@SLaks: puhtato - pohtato :) –

0

Mon approche consiste à utiliser les callbacks dans les options de votre plug-in, par exemple:

$(elem).myPlugin({ 
    "onStateChange": function(obj) { 
     if (obj.foo == "bar") { 
      // Do something 
     } 
    } 
}); 

Ensuite, dans l'utilisation du plugin:

settings.onStateChange.call(this, options); 
Questions connexes