我正在按照从 jQuery 文档中创作插件的说明进行操作。我试图将我的调用保持在与它们在第 6.1 节中指示的相同的命名空间中,但是我还需要能够通过每个调用传递更多选项。
我想做的事
$('#element').myFunction({
method: 'method1',
option1: 'option1',
option2: 'option2'
});
我目前拥有的
(function($) {
var methods = {
init: function(options) {
//initialization
},
method1: function(options) {
var settings = $.extend({
'option1' = 'option default',
'option2' = 'option 2 default'
}, options);
//use settings for given method ex: settings.option1, settings.option2
}
};
$.fn.myFunction(options) {
//method logic
if(methods[options.method]) {
return methods[options.method].apply(this, Array.prototype.slice.call(arguments, 1)); //I'm thinking I need to do something here to pass through the options to the methods???
} else if (typeof options.method === 'object' || !options.method) {
return methods.init.apply(this, arguments); //or possibly here?
} else {
$.error('Method ' + options.method + ' does not exist on jQuery.myFunction');
}
};
})(jQuery);
我已经有一段时间没有进行前端 Web 开发了,并且正在尝试重新了解它,但是方法逻辑部分让我有些困惑。我需要了解methods[options.method].apply()
. 我知道这是每个方法被调用的地方,但我不确定其他选项将在哪里传递。
[更新1]
我已经阅读了更多关于发生了什么的内容,apply()
并相信它通过了对象和任何其他参数。我尝试将其更改为,methods[options.method].apply(this, options);
但这似乎并没有纠正我的问题。
[更新2]
我现在通过进行以下更改使我的代码正常工作
var methods = {
init: function(options) {
//initialization
},
method1: function(element, options) {
var settings = $.extend({
'option1' = 'option default',
'option2' = 'option 2 default'
}, options);
//use settings for given method ex: settings.option1, settings.option2
element.each(function() {
};
}
};
$.fn.myFunction(options) {
//method logic
if(methods[options.method]) {
return methods[options.method](this, options); // apply(this, Array.prototype.slice.call(arguments, 1)); //I'm thinking I need to do something here to pass through the options to the methods???
} else if (typeof options.method === 'object' || !options.method) {
return methods.init.apply(this, options); // arguments); //or possibly here?
} else {
$.error('Method ' + options.method + ' does not exist on jQuery.myFunction');
}
};
不过,我将把这个开放几天,任何想要解释原始代码试图做什么与我的更改的人,我都会接受这个作为答案。