【发布时间】:2013-05-29 16:46:53
【问题描述】:
在使用插件时,我有时会偶然发现一个类似这样的插件:
- 它将采用构造函数参数。
- 某些参数解析为函数。
- 其中一些需要多次争论。
像这样:
{
color: function (someData, moreData) {
return someData + moreData;
}
}
如何将两个参数传递给该函数?
注意:我无法更改插件,因此不能将第二个参数移动到另一个构造函数参数。
示例 JavaScript:
(function ($) {
$.fn.greenify = function (options) {
var settings = $.extend({
color: function (someData, moreData) { // <-- THIS TAKES 2 ARGUMENTS!
return someData + moreData;
},
}, options);
return this.css({
color: settings.color,
});
};
}(jQuery));
$("#target1").greenify({
color: "blue"
});
$("#target2").greenify({
color: ["bl", "ue"] // <-- In your answer only this should be changed
});
我的目标:
<div id="target1">My Thing</div> // <-- will be blue
<div id="target2">My Thing2</div> // <-- will be black but should be blue
更新: 我误以为这段代码
$("#target1").greenify({
color: "blue"
});
会将值"blue" 传递给function (someData, moreData) 作为第一个参数someData。 这是错误的!实际发生的是默认回调(function (someData, moreData))被字符串"blue"完全替换!
【问题讨论】:
-
您实际上不必更改构造函数 (demo),但我想无论如何您都必须更新插件主体。
-
我猜您没有向我们展示实际的插件,因为您发布的内容没有多大意义(但可能是插件编码器的错误)。如果有,请链接到真正的源代码。
-
@Bergi: Here is the actual plugin 这向我提出了这个问题。但我的问题与设计决定无关。我很好奇 JS 的能力。
-
相关行是here - 它使用多个参数调用具有给定名称的方法(例如
$(…).select2("data", someValues, true))。那是你想要的吗?或者您想了解更多关于如何 设计 jQuery 插件以及使用.apply的信息? -
谢谢。这是一个很好的解决初始问题的方法。除此之外,我仍然对处理上述示例的方法感到好奇。
标签: javascript jquery jquery-plugins