jQuery:如何从插件返回数据

时间:2010-11-25 20:14:44

标签: jquery plugins flash

我想写自己的第一个插件。 到目前为止一切正常。但我怎样才能做出变量回报呢? 我尝试使用回调函数,但这并没有真正解决。

最终目标是从swf返回一个变量。

我希望很清楚我想要什么,任何人都可以提供帮助。

欢呼声。

这是我的代码(示例):


    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);
}

2 个答案:

答案 0 :(得分:0)

好吧,我的方法是将数据附加到特定元素(在这种情况下 - 无论你的swf包含在哪里)

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

编辑:

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

答案 1 :(得分:0)

我的方法是在插件的选项中使用回调,例如:

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

然后在你的插件中使用:

settings.onStateChange.call(this, options);