jquery插件如何维护对象的状态

我正在尝试创建一个简单的插件,并且我遇到了如何管理插件状态的问题。

(function ($) { // Static things for plugin goes here var uiHtml = "
" + "
"; var methods = { init: function (options) { return this.each(function () { // Create UI $(this).html(uiHtml); if (options) { var defaults = { name:"N/A" }; var opt = $.extend(defaults, options); $(this).find(".gaw-name").html(opt.name); } // Visual Events attach var uiobj = $(this).find(".gaw-box"); $(uiobj).mouseenter(function () { if (!this.isSelected) { $(this).css('border', '1px solid red'); } }); $(uiobj).mouseleave(function () { if (!this.isSelected) { $(this).css('border', '1px solid black'); } }); $(uiobj).click(function () { this.isSelected = !this.isSelected; if (this.isSelected) { $(this).css('border', '3px solid red'); } else { $(this).css('border', '1px solid black'); } }); }); }, getIsSelected: function (options) { return this.isSelected; // ALWAYS FALSE }, destroy: function () { } }; $.fn.gateaway = function (method) { var plugin = this; plugin.isSelected = false; if (methods[method]) { return methods[method].apply(plugin, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(plugin, arguments); } else { $.error('Method ' + method + ' does not exist on jQuery.pluginName'); } }; })(jQuery);

我想要实现的是保存插件(对象)的状态,如果它被选中或不是。 我正在调用我的插件

 $("#gate").gateaway('getIsSelected') 

结果总是,假…我知道问题在于“这个”范围,这是我第一次在客户端开发的问题,第二次我需要在今天完成它:-),所以如果它是有可能指出我在哪里或如何组织插件,以便能够保存每个插件的状态,它将节省我:-)

看一下关于在插件中存储状态的官方jQuery文档: http : //docs.jquery.com/Plugins/Authoring#Data

官方的jQuery建议是使用jQuery UI Widget Factory,因为它为存储状态(以及其他东西)提供了许多不错的选项,但是使用数据函数在jQuery元素上存储状态并不困难,如下所示:

 $.fn.myplugin = function (options) { var create = function (el, options) { // Find existing state if we're running this again on same element var state = el.data("myplugin") || {}; makeActualPlugin(el, state); state.something = "Store me for later"; el.data("myplugin", state); return el; }; this.each(function () { create($(this), options); }); };