Jquery回调/关闭问题

时间:2011-09-02 11:48:03

标签: jquery callback closures

我写了一个像这样的jquery插件

(function($){

$.inspect = function(prodid, flag, callback){
    //global plugin vars
    var inspect, info, tabs, generalInfo;

    var init = function(){
        //build basic layout
        //use of prodid and flag is ok
    }

    var fetch = function(){
        //fetch data
        //use of prodid and flag is ok
    }

    var render = function(){
        //render data
        //use of prodid and flag is ok
    }

    var empty = function(){
        //reset to basic layout
        //use of prodid and flag is ok
    }

    var listeners = function(){
        //bind eventhandlers
        //use of prodid or flag FAILS here
        inspect.dialog('option','close', /* how to put callback here? */ callback );


    }

    //existing instance?
    inspect = $(".inspectHolder");
    if(inspect.length>0){//existing instance
        inspect = $(".inspectHolder");
        info = $(".inspectInfo", inspect);
        tabs = $(".inspectTabs", inspect);
        empty();
    }
    else{//new instance
        init();
    }

}

})

第一个插件调用

prodid = 100
$.inspect( prodid, 0, function(){
    console.log(prodid);
});

第二个插件调用

prodid = 200
$.inspect( prodid, 0 , function(){
    console.log(prodid)
});

现在我的问题如下:

绑定我的事件处理程序会使每个事件都使用第一个prodid(= 100),而不是我作为$ .inspect()调用的参数传递的那个... 其他一切都很好

我知道我可以为每个$ .inspect()调用创建一个新实例,但那将是不干净或明智的(memorymanagement?)(据我所知,对于编程来说还是一个新手)

我尝试使用callback.call(this,prodid)或类似的东西,但它更像是尝试看看会发生什么然后真正理解它是什么...一些体面的文档对此非常欢迎,因为我找到关于这个不足的jquery文档(或者我只是在查看某些内容)

非常感谢任何帮助!

身体

0 个答案:

没有答案