2013-02-24 106 views
2

我使用這種設置允許訪問的jQuery插件外的變量:更簡單的方式來訪問jQuery插件變量?

(function($){ 

    $.fn.myplugin = function() { 
    return this.each(function() { 
     // plugin code here 
     console.log($.fn.myplugin.myvar); 
    }); 
    }; 

    $.fn.myplugin.myvar = { ... }; 

})(jQuery); 

我可以訪問myvar內使用$.fn.myplugin.myvar插件之外。但它非常冗長......我覺得必須有一種方法來訪問插件中的變量,名稱較短,如this.myvar。該示例不起作用,因爲this引用當前元素。但是還有另一種更簡單的方式來訪問變量嗎?

回答

3

$.fn是jQuery的prototype的別名,所以我認爲沒有簡單的方法,除非將該插件保存在變量中。

What does jQuery.fn mean?

+1

是,宣告了插件功能後,你可以把它分配給像'exports'一個變量,例如,遵循CommonJS約定:'var exports = $ .fn.myplugin; exports.myvar = ...' – 2013-02-24 20:46:29

1

gdoron的回答是最簡單的解決方案...你可以考慮在一個面向對象的風格,將被寫入插件另一件事,例如

function MyPlugin(element) { 
    this.element = element; 
} 

MyPlugin.prototype.init = function() { 
    //plugin code here 
} 

MyPlugin.myVar = { ... }; 

$.fn.myplugin = function() { 
    return this.each(function() { 
     var instance = $(this).data('myplugin'); 
     if (!instance) { 
      var instance = new MyPlugin(this); 
      $(this).data('myplugin', instance); 
     } 
     instance.init.apply(instance, arguments); 
    }); 
} 

然後,如果您需要訪問任何實例屬性或方法,您可以通過$('#someElement').data('myplugin');來實現。 您可以通過讓第一個參數成爲方法名稱,然後使用方法參數 (如jQuery UI的工作方式)來實現相同的方法...但實現起來稍微複雜一些。如果你有興趣,谷歌「jQuery小部件模式」。

+0

請注意,如果'myVar'是特定於實例的,則應在'MyPlugin'構造函數中聲明,例如。 'this.myVar = {...}' – 2013-02-24 20:57:05

0

我認爲這剛剛是比較容易的變量分配在定義函數(demo):

var myplugin; 
(function($){ 

    myplugin = $.fn.myplugin = function() { 
    return this.each(function() { 
     // plugin code here 
     console.log(myplugin.myvar); 
    }); 
    }; 

    myplugin.myvar = { test: true }; 

})(jQuery);