2010-10-20 179 views
1

我有一个棘手的问题。jquery插件:多次调用函数,传递不同的参数

我做了一个jQuery插件的Widget:

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

我把它称为一次页面时准备:(指定我想最后的排序)

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

}); 

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

我的问题是:如何在这个生成的代码里面插入我的插件,排序PopularSort LastSort回答,改变我的小部件的排序?

我可以在里面拨打Widget(13,50,{"sort":"top"}),或者我可以使用里面的功能,如change_sorting(top)

THX很多关于你的时间和帮助

编辑:谢谢您的回答:我已经在我的插件添加了这些行:所有的

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"}); }); 
+0

我很抱歉地说,但我不明白你的问题......如果你生成你的插件的HTML代码,这意味着你可以访问它为此修改它不应该是一个问题?! – MaxouMask 2010-10-20 08:48:36

+0

我只是不知道如何打电话给我的插件来改变排序方法。 – guillaumepotier 2010-10-20 09:29:16

回答

1

1日就检查好主意在创建元素之前存在元素。 2nd - 考虑其他jquery方法如何工作,最好的做法是使用Widget(13,50,{"sort":"top"})来创建和更新

+0

好的,谢谢你的回答。 – guillaumepotier 2010-10-20 09:23:33

1

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

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

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

它将处理排序的所有的改变;这样它有助于从实际创建Widget中抽象排序机制(它们对我来说看起来不同)。

如果你想获取当前排序在你的方法,你可以将其指定为“本”在构造函数中:

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

所以,你可以再做:

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

你好Emmerich。感谢您的答案。你能看一下我上面的编辑吗?我发现了一些似乎工作得很好的东西。你的方法比上面的方法有什么优点? Thx再 – guillaumepotier 2010-10-20 09:28:18

+0

那么它取决于你在Widget中做了多少处理以及它的语义。例如,如果Widget是为页面创建一次然后更改它的,我会使用我的方法。您编写代码的方式意味着每次用户点击时,Widget代码都会再次执行(包括任何Widget初始化 - 即使数据没有更改,您基本上会用新的代码覆盖旧的Widget,只是数据的观点)。与我的,只有围绕排序小工具的逻辑运行。 – EMMERICH 2010-10-20 10:14:22

+0

好的。如果您将来制作更复杂的小部件/插件,我会考虑您的答案。这只是显示排序后的引号而已。我会坚持;) – guillaumepotier 2010-10-20 11:32:46