簡體   English   中英

如何使jQuery插件中的設置(或選項)可用於所有方法?

[英]How to make settings (or options) in jQuery plugin available for all methods?

我已經使用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')。test({url:'another-url.php'});

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

問題是,當我調用“加載”時,settings.url等於“ default.php”而不是“ another-url.php”。

我是否可以像在OOP中那樣處理此問題,我的意思是將“設置”設為“類”的一個屬性,然后對該屬性的所有更改都將保持不變?

我想用偽代碼實現什么:

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
     }

}

這也將使我可以根據需要具有多個“實例”,每個實例都有其自己的設置值。

提前致謝 :)

因此,根據您的插件結構,您必須調用第一個init方法,因為當您調用$(“ ....”)。test('load')時,它將不會調用init函數,因此它將采用默認網址,該網址在第一次

  1. $( “......”)。測試( '初始化')
  2. $('#box1')。test({url:'another-url.php'})
  3. $( “......”)。測試( '負荷')

或者在插件內部始終調用init(); 它將解決您的問題

  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM