我想为jquery小部件添加一个回调。
作为一个例子,我看到可拖动窗口小部件中的回调都包含在以下内容中:
$.ui.plugin.add("draggable", "connectToSortable", {
// callbacks in here
})
这是否意味着我还必须将回调包装在$ .ui.plugin.add({})中;位?还有另一种方法吗?就像,我可以在窗口小部件选项中有一个函数可以处理这个,所以调用我的网格会看起来像模糊:
var foo = {
LoadIt: function(url, formid){
var bar = '',
$('#baz').grid({
title: {somevar : true},
rowcontent: {data: setup and populate rows},
onComplete: function(){
//mycallback could go here
}
});
}
}, // another grid loader, etc.
在我的情况下,我正在使用网格。网格通过ajax调用加载一些json数据,然后,现在dom填充了网格,我想用它做一些操作(例如,在悬停时添加背景颜色)。所以我想能够作为网格的一部分进行调用:
onComplete : function(){//add my background color on hover here};
有关如何将回调添加到jquery小部件的任何提示或建议?
我发现一个令我困惑的例子:
var Green5 = {
setLevel: function(x){
//...
this.element.css({background: greenlevels[level]});
var callback = this.options.change;
if ($.isFunction(callback)) callback(level);
},
// ... rest of widget definition
};
$.widget("ui.green5", Green5);
$('.target').green5({change: function(x) { alert ("The color changed to "+x); } });
在一个网站上发现这个,解释如何将回调添加到jquery小部件,但我没有看到$.ui.plugin.add
位的任何内容,也没有看到change
如何传递到{{1} }}。 setLevel
如何获得setLevel
中的函数?如果只是传递给green5的任何内容都是一个选项,因此可以通过this.options访问,那么在change
中调用callback
的{{1}}方法来自哪里?我很困惑。 :(
答案 0 :(得分:2)
在示例(找到here)中,作者指出我们可以像传递任何其他选项一样传递回调。如果我们重写他如何调用小部件,可能会更清楚:
var options = {
change: function(x){ alert("The color changed to "+x);}
}
$('.target').green5(options);
它的作用是将“更改”选项与一个匿名函数绑定,该函数接受一个变量并提醒用户颜色已更改为该变量。因此,通话
var callback = this.options.change;
检索作为“更改”选项传递的匿名函数,并将其分配给变量callback
。这条线
if ($.isFunction(callback)) callback(level);
只需检查回调是否确实是一个函数。它正在检查空值/不正确传递的参数。如果在options.change中传递的回调实际上是一个函数,我们用参数“level。”来调用它。
除非我们从外部修改插件,否则不需要使用ui.plugin.add()(参见示例here)。答案 1 :(得分:1)
我认为这可能适用于你:)
help_foo = function (){
alert('help !!!');
}
var callback = 'help_foo';
(callback)(function (){
callback failed
});