覆盖jQuery插件的设置?

时间:2013-04-05 10:50:37

标签: javascript jquery

我已经构建了一个这样的插件:

;(function ($,window,undefined){

  ...
  ...default settings area...
  ...content area...
  ...

})(jQuery,window);

但是这个插件可以有很多(!)配置。(文件配置)

因此每个配置文件都可以在js文件中。例如:

mySettings.js :

var mySetings= {a:1,b:2.....}

问题出在哪里:

  • 必须在插件之前加载设置文件。 (因此插件将能够在覆盖设置区域中读取mySettings

  • 与插件本身进行mySettings通信的唯一方法是通过window对象

问题:

配置插件的正确方法是什么,该插件可以通过js文件设置多个(!)设置。

1 个答案:

答案 0 :(得分:2)

由于我没有代码示例,我会给你一些通用的解决方案。

  1. 收集数组中的设置对象,并在覆盖设置区域内迭代它们。
  2. 通过窗口公开您的插件并直接在那里附加设置。
  3. Example 1

    <强> JS

    //File 1.js
    window.settings = window.settings || []; 
    window.settings.push({a:'11'}); 
    
    //File2.js
    window.settings = window.settings || []; 
    window.settings.push({b:'22', c:'33'}); 
    
    //File3.js
    window.settings = window.settings || []; 
    window.settings.push({b:'222'}); 
    
    //Main.js File
    ;(function ($,window,undefined){
    
        var plugin = function(settings){
            var defConfig = {
                a: '1', 
                b: '2',
                c: '3'
            }; 
    
            var len = settings.length, i; 
    
            if(len){
                for(i = 0; i < len; i++){
                   defConfig = $.extend(defConfig, settings[i]); 
                }
            }else{
                defConfig = $.extend(defConfig, settings); 
            }
    
            alert(JSON.stringify(defConfig)); 
        }; 
    
        var instance = new plugin(window.settings || []); 
    
    })(jQuery,window);
    

    Example 2

    //Main.js File
    ;(function ($,window,undefined){
    
        var plugin = function(){
            var defConfig = {
                a: '1', 
                b: '2',
                c: '3'
            }; 
    
            this.overrideSettings = function(settings){
                var len = settings.length, i; 
    
                if(len){
                    for(i = 0; i < len; i++){
                       defConfig = $.extend(defConfig, settings[i]); 
                    }
                }else{
                    defConfig = $.extend(defConfig, settings); 
                }
    
                alert(JSON.stringify(defConfig)); 
            }
        }; 
    
        window.instance = new plugin(); 
    
    })(jQuery,window);
    
    
    //File 1.js
    window.instance.overrideSettings({d:'93'}); 
    
    //File2.js
    window.instance.overrideSettings({b:'22222'});