2013-04-24 37 views
2

訪問jQuery腳本我啓動了一個jQuery腳本是這樣的:外功能

$('#an-id').drawbox(); 

這是jQuery腳本(的重要組成部分):

(function($) 
{ 
$.fn.extend(
{ 
    drawbox: function() 
    { 

     // Default options 
     var defaults = { 
      caption:  'Caption', 
      // Canvas properties 
      lineWidth:  3, 
      lineCap:  'round', 
      lineJoin:  'round', 
      miterLimit: 10, 
      strokeStyle: 'green', 
      fillStyle:  'none', 
      shadowOffsetX: 0.0, 
      shadowOffsetY: 0.0, 
      shadowBlur: 0.0, 
      shadowColor: 'none', 
     } 

     options = $.extend(defaults); 

     return this.each(function() 
     { 

      //etc 

腳本運行正常,但我想稍後在單獨的腳本中獲取「選項」值。我猜測選項設置已設置並存儲在函數中,可以稍後檢索。

我已經試過了諸如:

$('#an-id').drawbox.options 

...但似乎無法得到它。

+2

This:'options = $ .extend(defaults);'對我來說看起來很不對勁。我認爲你需要「選項」作爲函數的參數,然後該行應該看起來像'options = $ .extend({},defaults,options);'現在你已經知道了,「options」是一個隱式的全局(壞),它將被設置爲對全局jQuery對象的引用。 – Pointy 2013-04-24 21:10:54

+0

您需要通過參數獲取選項,並將param選項與屬性默認值合併,使用選項屬性覆蓋默認屬性,或者如果選項爲空,則使用默認屬性 – 2013-04-24 21:16:24

回答

1

你有你的drawbox()方法,但它似乎你目前設置爲只執行一個內部函數。做你想做什麼,你必須設置你的插件,允許多個方法...

這樣做的一般jquery approved方法是將所有的方法包括成methods object,裏面你的插件代碼,其中的功能init是默認的功能,像這樣......

var methods = { 
    "getOptions" : function(){ return options; }, 

    "init" : function(){ 
    return this.each(function(){ 
     //your current code goes here (what happens when you call $().drawbox) 
    }); 
    } 
} 

現在,你必須包括下面的代碼,或類似的東西,讓你的插件調用你想要的方式...

$.fn.drawbox = function(method){ 
    if(methods[method]){ 
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    }else if(!methods[method]){ 
     return methods.init.apply(this, arguments); 
    }else{ 
     $.error('Method ' + method + ' does not exist on jQuery.drawbox'); 
    }  
    }; 

注意這是什麼。當調用.drawbox()時,執行上述操作,如果沒有參數傳遞,則調用init函數。如果傳遞參數,例如drawbox('getOptions'),則會執行方法對象中的getOptions方法。

通過這種方式,您可以返回插件範圍內的任何變量,與概念上的getter/setter類似。您還需要刪除當前代碼中的行drawbox : function(){...,因爲上述內容會替代此行。

1

看:

(function($) { 
    $.fn.yourPlugin = function(options) { 
     options= jQuery.extend({ opt: 1, opt2: 2 }, options); 
     // the escope of your plugin.... 
    } 
})(jQuery); 

你需要獲得通過參數的選項,合併與屬性默認帕拉姆選項,並選擇屬性覆蓋默認屬性或lefting默認如果選項是空

1

drawbox是一個函數,所以這行是無效的:

$('#an-id').drawbox.options 

並調用$('#an-id').drawbox()將每次執行該代碼,其是不正確的。

你必須使用參數的構造方法,這樣就可以返回類似這樣的

$('#an-id').drawbox('options') 

看看手風琴執行的選項,我認爲它確實像你所需要的:

http://api.jqueryui.com/accordion/#method-option