繁体   English   中英

将回调添加到jquery小部件

[英]Adding a callback to a jquery widget

我想为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传递到setLevel setLevel如何获得正在change的函数? 如果只是传递给green5的任何东西都是一个选项,因此可以通过this.options访问,那么在if ($.isFunction(callback)) callback(level);调用levelcallback方法在哪里if ($.isFunction(callback)) callback(level); 来自? 我很困惑。 :(

在示例( 此处找到)中,作者指出我们可以像传递任何其他选项一样传递回调。 如果我们重写他如何调用这个小部件可能会更清楚:

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()(参见此处的示例)。

我认为这可能适用于你:)

help_foo = function (){
 alert('help !!!');
}
var callback = 'help_foo';

(callback)(function (){
   callback failed
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM