我正在编写一个插件,并且在命名空间和多种方法时遵循jQuery文档推荐的练习
http://docs.jquery.com/Plugins/Authoring.
我的init()负责使用$.extend()合并默认和自定义设置但是我无法弄清楚如何在init()方法之外使这些选项可用.假设使用调用并初始化我的插件
$("a").myplugin({debug:false});
$("a").myplugin("someMethod")?
一个粗略的例子是:
(function( $){ var methods = { init: function(customSettings) { var options = { debug: true } return this.each(function () { if (customSettings) { $.extend(options,customSettings); } }); },someMethod: function() { if(options.debug) { // <-- How can I access options here? // do something } } } })( jQuery ); $.fn.myplugin = function (method) { if (methods[method]) { return methods[method].apply(this,Array.prototype.slice.call(arguments,1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this,arguments); } else { $.error('Method ' + method + ' does not exist on jQuery.tbwaga'); } };
解决方法
我没有看你的插件模板,但我想分享这个
jQuery plugin formatting …它在jQuery的存储数据中添加了对DOM对象的反向引用.这使得即使从插件闭包之外也很容易访问插件函数和/或变量.
$('a').data('myplugin').function_name();
var height = $('a').data('myplugin').options.height;
但要回答你的问题,为了让你的选项可用于闭包内的其他函数,只需在init函数之外定义选项变量:
(function( $){ var options,methods = { init: function(customSettings) { options = { debug: true }