我正在尝试用jQuery编写我的第一个插件,我对回调有点困惑。
对我而言,似乎一切都很好,但不是很好。
逻辑是(我想的)是创建一个全局settings
对象。实例化时,tokenizer
设置将使用给定的设置/选项进行扩展/覆盖,因此应覆盖onAdd
此处$('#xxx').tokenizer(...
之后我只是add
一个项目,但在控制台中它很难过:
The item in onAdd
undefined
这是jsFiddle
var settings = {
onAdd: function () {},
onRemove: function () {},
sourceSelecter: null,
targetSelector: null
};
$.fn.tokenizer = function (options) {
this.settings = $.extend({
targetSelector: this,
idName: 'id'
}, settings, options);
this.add = function (item) {
console.log('The item in function add: ' + item);
this.settings.onAdd.call(item);
};
this.remove = function (item) {
this.settings.onRemove.call(item);
};
return this;
};
var $tokenizer = $('#xxx').tokenizer({
sourceSelector: 'group',
onAdd: function (item) {
console.log('The item in onAdd');
console.log(item);
}
});
$tokenizer.idName = 'groupId';
$tokenizer.add('abcdefg');
答案 0 :(得分:2)
call
应该是: -
this.settings.onAdd.call(this, item);
<强>语法强>
fun.call(thisArg[, arg1[, arg2[, ...]]])