gpt4 book ai didi

jquery - 使用 jQuery 插件设计模式调用方法

转载 作者:行者123 更新时间:2023-12-03 22:17:37 25 4
gpt4 key购买 nike

我一直使用 jQuery Boilerplate 来开发插件,但我不明白的一件事是如何从插件外部调用方法。

作为引用,这里是我正在讨论的样板代码: http://jqueryboilerplate.com/

在我的 fiddle 中,

http://jsfiddle.net/D9JSQ/2/

这是代码:

;(function ( $, window, document, undefined ) {

var pluginName = 'test';
var defaults;

function Plugin(element, options) {
this.element = element;

this.options = $.extend( {}, defaults, options) ;

this._name = pluginName;

this.init();
}

Plugin.prototype = {
init: function() {
this.hello();
},
hello : function() {
document.write('hello');
},
goodbye : function() {
document.write('goodbye');
}
}


$.fn[pluginName] = function ( options ) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName,
new Plugin( this, options ));
}
});
}


})( jQuery, window, document );

$(document).ready(function() {
$("#foo").test();
$("#foo").test('goodbye');
});

我尝试使用以下语法调用再见方法:

$("#foo").test('goodbye')

我该如何实现这一目标?提前致谢

最佳答案

您必须获取对该类的引用才能使用该插件结构调用它的方法。

http://jsfiddle.net/D9JSQ/3/

$(document).ready(function() {
var test = $("#foo").test().data("plugin_test");
test.goodbye();
});

要做你想做的事,你必须摆脱 document.write 来测试它。

http://jsfiddle.net/D9JSQ/8/

;
(function($, window, document, undefined) {

var pluginName = 'test';
var defaults;

function Plugin(element, options) {
this.element = element;

this.options = $.extend({}, defaults, options);

this._name = pluginName;

this.init();
}

Plugin.prototype = {
init: function(name) {
this.hello();
},
hello: function(name) {
console.log('hello');
},
goodbye: function(name) {
console.log('goodbye');
}
}


$.fn[pluginName] = function(options) {
return this.each(function() {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
else if ($.isFunction(Plugin.prototype[options])) {
$.data(this, 'plugin_' + pluginName)[options]();
}
});
}


})(jQuery, window, document);

$(document).ready(function() {
$("#foo").test();
$("#foo").test('goodbye');
});​

查看控制台以获取信息。

关于jquery - 使用 jQuery 插件设计模式调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com