gpt4 book ai didi

javascript - 在编写 jquery 插件时,如何从另一个方法调用我的主要插件方法之一?

转载 作者:行者123 更新时间:2023-11-30 06:45:49 24 4
gpt4 key购买 nike

我正在遵循 jquery 网站上的插件创作指南,但我无法弄清楚如何从同一插件中的另一个方法调用主插件方法。

我有一个这样的插件:

(function($){
var methods = {
init: function(options) {
var settings = {};

//this == context element of plugin, already jquery
return this.each(function() {
var $this = $(this);
if( options ) {
settings = $.extend({}, settings, options);
}
var data = $this.data('PluginData');
if(!data) {
//set up
}

});
},
some_fn: function() {
//do some stuff
},
another_fn: function() {
//do other stuff, then somehow call some_fn(), maybe via methods.some_fn() ?
}
};

jQuery.fn.SomePlugin = 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 {
console.log('there was an error');
}
};
})(jQuery);

这几乎是 jquery 的框架代码。但是,我遇到的问题是找出创建仅适用于我的插件方法的“实用程序”函数的最佳方法,或者如何从一个插件方法调用另一个插件方法。

例如,在我的插件中,我有 3 个方法,initsome_fnanother_fn。当我在 another_fn 中调用 $('#el').SomePlugin('another_fn') 时,我想调用 some_fn。我怎样才能做到这一点?调用 methods.some_fn() 可能会起作用,但是,这取决于方法在方法对象中定义的顺序,对吗?所以我可以从 another_fn 调用 some_fn,但反之不行吗?

此外,创建一个实用函数的正确方法是什么,我的插件中的所有方法都可以使用,这样我就不会弄乱全局命名空间?我是否只是在插件的开头定义实用函数,就在调用 var 方法之前?

编辑:感谢 Matt Ball,我已经确认 methods.some_fn() 确实可以调用其他主要方法。现在我只想知道创建(私有(private))效用函数的最佳实践是什么

最佳答案

要获得最佳实践,您应该查看:http://jqueryboilerplate.com他们为您的问题提供了示例。 :)

对于您的示例,您可以利用 init 函数的作用域:

(function($){
var methods = {
init: function(options) {
var settings = {};

var privateMethod = function(){ ... }

//this == context element of plugin, already jquery
return this.each(function() {
var $this = $(this);
if( options ) {
settings = $.extend({}, settings, options);
}
var data = $this.data('PluginData');
if(!data) {
//set up
}

});
},
some_fn: function() {
//call private function
privateMethod()
// do some stuff
}
};

jQuery.fn.SomePlugin = 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 {
console.log('there was an error');
}
};
})(jQuery);

关于javascript - 在编写 jquery 插件时,如何从另一个方法调用我的主要插件方法之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020183/

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