如何在jQuery插件中为所有方法提供设置(或选项)?

时间:2015-10-21 10:29:06

标签: javascript jquery

我已经使用jQuery几个月了(我还是Mootools的门徒)现在我正在尝试用jQuery创建我的第一个插件。

问题是,我想在我的插件中有一些方法,我希望这些方法能够访问所有"属性"插件。

例如:

(function( $ ) {
     $.fn.test= function(method) {
          var settings;
          init: function() {
               var _defaults = {
                    option1: 'value1',
                    option2: 'value2',
                    option3: 'value3',
                    url: 'default.php'
               };
               settings = $.extend({}, _defaults, method);
          },
          load: function(){
               $.ajax({
                    cache   : false,
                    type    : "GET",
                    url     : settings.url,
                    dataType: "json",
                    success : function(response){  
                         console.log(response);
                    },
                    error   : function(response) { 
                         alert("Error loading data."); 
                    }
               });              
          }
     }
}( jQuery ));

现在调用插件本身:     //初始化     $('#BOX1&#39)。测试({          url:' another-url.php'     });

// Call the load method
$('#element').test('load');

问题是,当我打电话给#34;加载" settings.url等于' default.php'而不是' another-url.php'。

是否可以像在OOP中那样处理这个问题,我的意思是,制作'设置' " class"的属性然后对该属性的所有更改都是持久的?

我想在伪代码中实现的目标:

Class Test{
     // Specify default settings
     private settings = // some default values;

     // Constructor
     public Test(specificSettings){
          //Code to merge/update specificSettings with settings
     }
     public load(){
           // If I access this.settings in here, I will get the
           // updated settings and not the default one
     }

}

这也将允许我拥有尽可能多的"实例"根据需要,每个人都有自己的设置值。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

因此,根据您的插件结构,您必须调用第一个init方法 因为当你调用$(“....”)。test('load')所以它不会调用init函数所以它将采用在第一次声明的默认url

  1. $( “......”)。试验( '初始化')
  2. $('#box1')。test({url:'another-url.php'})
  3. $( “......”)。试验( '负载')
  4. 或者插件内部总是调用init();它会解决你的问题

    (function( $ ) {
         $.fn.test= function(method) {
              var settings;
              **init();** // call internally
              init: function() {
                   var _defaults = {
                        option1: 'value1',
                        option2: 'value2',
                        option3: 'value3',
                        url: 'default.php'
                   };
                   settings = $.extend({}, _defaults, method);
              },......