2015-01-11 3 views
0

Как я могу расширить общедоступные методы в плагине с помощью jquery?Как я могу расширить общедоступные методы в плагине с помощью jquery?

$.fn.myPluginName = function(PublicOptions) { 

    // Remember the root assigned object. 
    var Root = this; 

    // Set private defaults. 
    var Defaults = { 
     param1:  'param1', 
     param2:  'param2', 
     onSuccess: function(){} 
    }; 

    // Do a deep copy of the options - http://goo.gl/gOSSrg 
    var Options = $.extend(true, {}, Defaults, PublicOptions); 

    // Private debug function. 
    function log(msg) { 
     console.debug(msg); 
    } 

    // Define the public api and its public methods. 
    var PublicApi = { 

     method1 : function (PublicOptions) { 

      return "extended method 1"; 
     }, 
     method2 : function (PublicOptions) { 

      return "extended method 2"; 
     } 
    }; 

    // Return the PublicApi object. 
    return PublicApi; 
}; 

Расширенные методы, которые я хочу, чтобы поместить их в var PublicApi = {}

var extensionMethods = { 

    method3: function(){ 
     return "extended method 3"; 
    }, 

    method4: function(){ 
     return "extended method 4"; 
    } 
}; 

В настоящее время для console.log($(this).myPluginName());,

Object {method1=function(), method2=function()} 

Но было бы идеально, если я могу расширить методы к,

Object {method1=function(), method2=function(), method3=function(), method3=function()} 

Возможно ли это?

+1

Да, просто добавьте '' method3' и method4' как свойства 'PublicApi'. – haim770

ответ

1

Вы можете просто передать объект в плагин с небольшой модификацией кода, как

$.fn.myPluginName = function(extMethods){ 
    //(...) Some code here 
    PluginApi = { ... } // your default methods go here 
    if(typeof extMethods == "object"){ 
     for(var key in extMethods) 
      PluginApi[key] = extMethods[key]; 
    } 
} 

Что if блок делает это, он проверяет, если предоставленный аргумент является объектом, а затем добавляет методы PluginApi самая название объекта с использованием for...in.

Вы можете назвать как $(this).myPluginName(extensionMethods);

+0

всякая отличная идея! Спасибо. – laukok

+1

@tealou рад, что помог вам :) –

+0

oh, где происходит 'k'? – laukok