[英]jQuery Plugin Options
首先,我知道这是一个基本的 JS 问题,而不是 jQuery。 我正处于那个学习点,我似乎无法完全解决一些范围问题。 所以我需要一些解释。
我一直在阅读我能找到的每篇文章/教程,但只需要一些答案。 我设置了这个基本代码来进行试验(因为实际代码太大而无法在此处发布)。
在下面的实验中,当单击 selector1-change 按钮时,“cmd”变量显示正确,但对 this.options 的引用是“undefined”,因为它是 MySelector() 的不同实例,除非我偏离了方向.
那么如何调用这样一个对象的实例呢?
例子:
您可以通过创建它来使用 jQueryUI 的对话框,然后您可以向它传递命令,如 $('#mydiv').dialog('close'); 这将访问附加到该元素的实例。 这是如何实现的?
JQUERY_MYSELECTOR.JS
(function($){
$.fn.MySelector = function(incoming) {
if (typeof(incoming) != 'object') {
return runCommand(incoming);
}
var options = $.extend({},{
id: false,
backgroundColor: false
},incoming);
function runCommand(cmd) {
alert('blah:'+this.options.backgroundColor+"\n"+'cmd:'+cmd);
}
}
})(jQuery);
脚本
<script type="text/javascript" src="jquery_myselector.js"></script>
<script type="text/javascript">
$j(document).ready(function() {
$j('#selector1).MySelector({ backgroundColor: '#000000' });
$j('#selector1-change').click(function() {
$j('#selector1').MySelector('mooocow');
});
});
</script>
风格
<input type="button" value="selector1" id="selector1" />
<br/>
<input type="button" value="selector1-change" id="selector1-change" />
更新忘记在 selector1 上使用插件(duh)
在为选项赋值之前调用 runCommand - options 在 runCommand 的主体内具有undefined
的值。 不要问我 JS 是如何在你声明之前看到 runCommand 的主体的,但它可以。
此外,在 MySelector 的第一级, this
绑定到运行$j('#selector1-change')
的结果,这是一个数组。 您将需要迭代该数组。
尝试这样的事情:
(function ($) {
function runCommand(e, cmd) {
alert('blah:' + e.options.backgroundColor + "\n" + 'cmd:' + cmd);
}
$.fn.MySelector = function (incoming) {
this.each(function () {
if (typeof (incoming) != 'object') {
return runCommand(this, incoming);
} else {
this.options = $.extend(this.options || {
id: false,
backgroundColor: false
}, incoming);
}
});
}
})(jQuery);
你可以尝试这样的事情:
(function($){
$.myPlugin = {
foo: function () {...},
bar: function () {...},
foobar: function () {...}
};
$.fn.MySelector = function (operation) {
if (typeof operation === 'string') {
switch(operation) {
'open':
$.myPlugin.foo();
break;
'destroy':
$.myPlugin.bar();
break;
default:
$.myPlugin.foobar();
break;
}
}
}
}(jQuery));
options
是在您的主体范围内使用var
语句声明的,您不需要在 runCommand 函数中使用this
关键字,因为在该函数中您可以访问外部闭包:
function runCommand(cmd) {
alert('blah:'+options.backgroundColor+"\n"+'cmd:'+cmd);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.