代码之家  ›  专栏  ›  技术社区  ›  guillaumepotier

jquery插件:多个函数调用,传递不同的参数

  •  1
  • guillaumepotier  · 技术社区  · 14 年前

    我有个棘手的问题。

    我制作了一个jquery小部件插件:

    $.fn.Widget=function(id_place,id_event,options){};
    

    当页面准备就绪时,我调用它一次:(指定我要最后一次排序)

    $(document).ready(function() {
        $('#mydiv').Widget(13,50,{"sort":"last"});
    
    });
    

    但是在这个插件中,我生成了一个小菜单栏,其中有3个链接可以更改元素的排序:“last”(初始调用);“top”(最流行)和“answered”(带答案)。

    我的问题是:如何在插件内部生成的代码中,对popularsort lastsort进行排序,更改小部件的排序??

    我可以打电话吗? Widget(13,50,{"sort":"top"}) 它的内部,或者我可以使用一个内部函数 change_sorting(top) ??

    为了你的时间和帮助

    编辑:感谢您的回答:我在插件中添加了以下行:

    var object = $(this);
        $(".sort_last").click(function(){ object.Widget(13,50,{"sort":"last"}); });
        $(".sort_top").click(function(){ object.Widget(13,50,{"sort":"top"}); });
        $(".sort_answered").click(function(){ object.Widget(13,50,{"sort":ansered"}); });
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Zlatin Zlatev    14 年前

    首先,最好在创建元素之前检查它们是否存在。 第二-考虑到其他jquery方法的工作方式,最好是使用 Widget(13,50,{"sort":"top"}) 用于创建和更新

        2
  •  1
  •   EMMERICH    14 年前

    如果排序的更改是由用户进行的,那么它不应该在小部件构造函数中。可以很容易地在构造函数中用 options.sort = "newSort"; 但是我想你想要不同的东西。

    考虑向对象添加一个方法,例如:

    $.fn.Widget.prototype.changeSort(sort) {
      // add your sorting code here, using this.sort as the current sort
    }
    

    它将处理排序的所有更改;这样有助于从实际创建小部件中抽象排序机制(它们对我来说似乎不同)。

    如果希望访问方法中的当前排序,可以在构造函数中将其分配给“this”:

    this.sort = options.sort 然后参考 this.sort 在小部件原型的任何方法中。

    所以你可以这样做:

    $(function() {
      var widget = $('#mydiv').Widget(13,50,{ sort: 'last' });
      widget.changeSort("answered");
    });