扩展jQuery插件

时间:2009-07-19 05:03:46

标签: jquery

假设我有一个像$ .abc = function(){}这样的jQuery插件。现在我想提供一个额外的模块,它使用与$ .abc相同的范围并扩展其功能。对于例如在我的abc插件中,我将检查是否说变量mod1 = true;如果是真的,那么我会自动调用mod1的thoso函数。

我的问题是如何编写mod1以便它可以与我的基本插件共享相同的命名空间,并且我可以从我的插件中调用它,例如mod1.getFiles();

谢谢你的时间。对不起,如果这不是很清楚。如果您有任何问题,我会再次解释。

更新:如何调用插件栏的功能测试?

$.fn.pluginFoo = function() {
    ...
     CALL FUNCTION TEST OF PLUGINBAR
    ...
};

$.fn.pluginBar = function() {
    ...
    function test() {
        alert('this is a test'); 
    }
    ...
};

2 个答案:

答案 0 :(得分:2)

无需创建共享数据对象。您可以使用简单的return语句将一个插件的某些功能公开给其他插件。

$.fn.pluginFoo = function () {
     // here you can access public "members" of pluginBar
     $.fn.pluginBar.fn3();
     $.fn.pluginBar.fn4();
}


$.fn.pluginBar = function () {
    // private "members" (only this plugin can access them)
    var fn1 = function () { ... }
    var fn2 = function () { ... }

    // public "members" (other plugin can access that as well)
    // fn3 is defined in the return, fn4 allows to access private function fn1
    return {
        fn3: function () { ... },
        fn4: fn1
    };
}

答案 1 :(得分:0)

您希望两个插件访问共享的数据/函数集,您可以这样做:

var myPluginData = {
    flag: true,
    alertNothing: function() {
        alert('I do Nothing');
    }
};

$.fn.pluginFoo = function() {
    ...
    myPluginData.flag = false;
    myPluginData.alertNothing();
    ...
};

$.fn.pluginBar = function() {
    ...
    myPluginData.alertNothing();
    myPluginData.flag = true;
    ...
};

你实际上并不需要为它定义一个对象,但它确实使事情更加清晰。