我试图将我的一些代码转换为可重用的插件。 很多时候我用来自Ajax请求的动态选项填充选择。jQuery - 创建插件的正确方法
我已经成功地这样创造的东西:
$.fn.fillSelect = function fillSelect(options) {
var self = this;
options = $.extend({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Data.asmx/StatusList",
dataType: "json",
async: true,
success: function(data) {
var list = "";
$.each(data.d, function(i) {
list += '<option value='
+ data.d[i].ID + '>'
+ data.d[i].Nazwa
+ '</option>';
});
self.filter("select").each(function() {
$(this).empty();
$(this).append(list);
//use selectmenu
if ($.ui.selectmenu) $(this).selectmenu();
});
}//,
//error: function(result) {
// alert("Error loading data!");
//}
}, options);
$.ajax(options);
return self;
}
这背后的想法是能够以一个请求,以填补多个选择具有相同的数据多次。
我有Ajax请求的默认选项,但我想添加一些更多的选项。
例如:
清除 - 如果我想要新的选项替换现有的或追加的填充确定。
另外我想添加一些回调函数,我可以作为参数传递。 例如,如果服务器请求失败,我想指定一个函数,在发生此错误后将调用 - 例如显示警报或禁用我的选择。
我的问题是我应该如何改变我的插件或我应该使用哪种模式(模板)?
我发现的每一个样板文件都是用来创建插件,它们会保留在选定的项目中,以便稍后可以调用该插件的方法。
我需要一个简单的插件,允许用户填写选择,然后将结束它的生命:)
我主要的想法是做只有一个请求到服务器的所有元素。
这里的jsfiddle演示:http://jsfiddle.net/JC7vX/2/
感谢您的回应,但我怎么能在这里插入Ajax调用。我的第一个想法是在this.each()中,但是每次调用元素时都会调用Ajax调用。 – Misiu
其他代码/ jsfiddle会有所帮助,但是您可以针对表单调用插件,然后使用用户定义的选项将类添加到您希望插件运行的选择元素。如果不允许客户端代码传递成功处理程序,那么将成功处理程序定义为回调会更好地使插件更具可重用性,可以证明,插件是没有意义的。 – SigInTheHead
这里是jsfiddle演示玩:http://jsfiddle.net/JC7vX/2/ – Misiu