我正在尝试创建一个简单的插件,并且我遇到了如何管理插件状态的问题。
(function ($) {
// Static things for plugin goes here
var uiHtml = "<div class='gaw-box'>" +
"</div>";
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')
结果总是,假...我知道问题在于“这个”范围,这是我第一次在客户端开发的问题,第二次我需要今天完成它:-),所以,如果有可能指出我在哪里或如何组织插件,以便能够保存每个插件的状态,它将节省我:-)
答案 0 :(得分:3)
官方的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);
});
};
答案 1 :(得分:1)
查看有关在插件中存储状态的官方jQuery文档:http://docs.jquery.com/Plugins/Authoring#Data