我有一个棘手的问题。
我制作了一个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"}); });
答案 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");
});