我写了一个插件来提供我所有流行的ColdFusion默认值,例如:
它正在运作,但我不知道为什么我必须使用
myXHR = $.fn.myAjax()
而不是
myXHR = $.myAjax()
以下是代码:
!function($) {
$.extend(
$.fn, {
myAjax: function(myURL, settings) {
var local = {};
$('#msg').empty().removeClass('alert alert-info');
local.settings = $.extend({}, $.fn.ajaxDefaults, settings);
local.myURL = myURL + '?returnFormat=json&queryFormat=column'
local.result = $.ajax(local.myURL,local.settings)
local.result.done(function(result) {
if (result.MSG) {
$('#msg').html(result.MSG).addClass('alert alert-info');
}
});
local.result.fail(function(A,B,C) {
$('#msg').html(C).addClass('alert alert-info');
});
return local.result;
},
ajaxDefaults:{
type: 'POST',
dataType: 'json',
async:false
// todo: context = this
}
}
)
$('input[type=checkbox]').bind('change', function(myEvent, ui) {
var settings = {};
settings.data = {};
settings.data.PersonID = $(this).val();
settings.context = this;
if ($(this).is(':checked')) {
settings.data.method = 'check';
myXHR = $.fn.myAjax('Evnt.cfc',settings);
myXHR.done(function(result) {
if (!result.MSG) {
log(result.QRY.DATA);
}
});
} else {
settings.data.method = 'uncheck';
myXHR = $.fn.myAjax('Evnt.cfc',settings);
myXHR.done(function(result) {
if (!result.MSG) {
log(result.QRY.DATA);
}
});
}
});
}(jQuery);
答案 0 :(得分:3)
你基本上设置了这样的插件:
( function($) {
$.fn.doSomething = function() {
// stuff
};
}(jQuery));
...因此有一个对jQuery对象进行操作的插件。所以这会奏效:
$('#something').doSomething();
但你这样称呼它:
$.doSomething(); // doesn't work
由于您显然希望您的函数在jQuery命名空间中独立存在,因此您可以将其设置为:
$.doSomething = function(){
// stuff
};
因此,对于您的代码,请尝试在函数末尾正上方添加此代码:
$.myAjax = $.fn.myAjax;
作为旁注,为您的插件添加多个命名空间(从您的示例中ajaxDefaults
)并不是一个好习惯。值得快速阅读jQuery Plugin Authoring page以获得一些好的提示。