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

时间:2010-10-20 08:30:58

标签: jquery jquery-plugins

我有一个棘手的问题。

我制作了一个jquery Widget插件:

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

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

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

});

但是在这个插件中,我生成了一个小菜单栏,有3个链接来改变我的元素的排序:“last”(初始调用); “顶部”(最受欢迎)和“回答”(带答案)

我的问题是:如何在我的插件中生成的代码中,排序PopularSort LastSort回答,更改我的Widget的排序?

我可以在其中调用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 个答案:

答案 0 :(得分:1)

首先,在创建元素之前检查元素是否存在是个好主意。 第二 - 考虑其他jquery方法如何工作,最好是使用Widget(13,50,{"sort":"top"})进行创建和更新

答案 1 :(得分:1)

如果用户进行了排序更改,则不应该在Widget构造函数中。您可以使用options.sort = "newSort";轻松更改构造函数中Sort的值,但我认为您需要不同的东西。

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

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

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

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

this.sort = options.sort然后在Widget原型的任何方法中用this.sort引用它。

所以你可以这样做:

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