maz*_*iak 8 javascript jquery jquery-plugins
我正在创建一个范围相当大的jQuery插件.事实上,该插件在技术上由一些可以协同工作的插件组成.
(function($){
$.fn.foo = function(){
//plugin part A
}
$.fn.bar = function(){
//plugin part B
}
$.fn.baz = function(){
//plugin part C
}
}(jQuery))
Run Code Online (Sandbox Code Playgroud)
是否可以命名jQuery插件,使小插件可以是更大的插件的功能
$.fn.foo.bar = function(){}
$.fn.foo.baz = funciton(){}
Run Code Online (Sandbox Code Playgroud)
这样可以避免污染jQuery函数名称空间.然后你可以调用插件
$('#example').foo()
$('#other_example').foo.bar()
Run Code Online (Sandbox Code Playgroud)
我自己尝试这个问题时遇到的问题是声明为foo()插件函数属性的函数没有正确设置对'this'的引用.'this'最终引用父对象而不是jQuery对象.
任何想法或意见将不胜感激.
-Matt
gna*_*arf 11
一旦你使用$.fn.foo.bar()- this指向$.fn.foo,这是你在JavaScript中this所期望的(作为调用函数的对象.)
我注意到jQuery UI(比如可排序)的插件中你调用的函数如下:
$(...).sortable("serialize");
$(...).sortable({options});
Run Code Online (Sandbox Code Playgroud)
如果你正在做这样的事情 - 你可以扩展jQuery本身:
$.foo_plugin = {
bar: function() {},
baz: function() {}
}
$.fn.foo = function(opts) {
if (opts == 'bar') return $.foo_plugin.bar.call(this);
if (opts == 'baz') return $.foo_plugin.baz.call(this);
}
Run Code Online (Sandbox Code Playgroud)