【问题标题】:Adding a callback to a jquery widget向 jquery 小部件添加回调
【发布时间】:2010-12-31 09:47:09
【问题描述】:

我想向 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 方法来自哪里?我很混乱。 :(

【问题讨论】:

    标签: javascript jquery callback widget


    【解决方案1】:

    在示例中(找到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)。

    【讨论】:

      【解决方案2】:

      我认为这对你有用:)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多