我正在使用以下格式的私有jQuery插件:
(function( $ ){
var defaults = {};
$.fn.cmFlex = function(opts) {
this.each(function() {
//Element specific options
var o = $.extend({}, defaults, opts);
//Code here
});
//code Here
};
})( jQuery );
在首次调用$ .cmFlex()之前,我将如何继续从服务器加载默认选项?
答案 0 :(得分:1)
$.getJSON("http://my.domain.com/prefsUrl?callback=?", function(defaults){
$.fn.cmFlex = function(opts) {
this.each(function() {
//Element specific options
var o = $.extend({}, defaults, opts);
//Code here
});
//code Here
};
});
假设prefsUrl返回有效的JSONP响应。如果你不熟悉JSONP,我建议你谷歌吧。
答案 1 :(得分:0)
您有两种选择:
async
的选项,默认情况下设置为true。如果将此更改为false,则JS执行流将挂起,直到您从服务器获得答案。这不是一个非常好的解决方案,因为如果你的服务器关闭,或者那些全局变量的生成是一个漫长的过程,你将让用户等待它。cmFlex
时,检查defaults
是否为null
。如果是,则调用Ajax方法填充它,并放置一个执行cmFlex
函数的回调函数。这里的问题是,如果在获得默认值之前再次调用它,那么您将对服务器进行重复调用。isLoaded
,如果用户第二次调用cmFlex
,则设置此标志到false
,引发异常,或处理它将此调用添加到队列。