我想创建一个jQuery插件来包装图表组件.它将具有addLineSerie或addBarsSerie等功能.然后我想创建其他插件来扩展这个插件以添加新功能或覆盖所需的但仍然能够调用原始插件功能.
我从下面的方法开始.它有点工作,但是,正如我后来意识到的,我无法调用原始的"父"实现(如果我创建了myB的实例,我不能调用myA.goA2).
(function($){
$.fn.myA = function(settings) {
this.goA = function() {alert("goA: "+settings);};
this.goA2 = function() {alert("goA2: "+settings);};
return this;
};
})(jQuery);
(function($){
$.fn.myB = function(settings) {
this.myA(settings);
this.goA2 = function() {alert("goA2B: "+settings);};
this.goB = function() {alert("goB: "+settings);};
return this;
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
谢谢.
如果可以并且认为它是合适的,那么除了进行同步AJAX调用之外,处理这样的事情的最佳方法是什么?
var A = getDataFromServerWithAJAXCall(whatever);
var B = getDataFromServerWithAJAXCallThatDependsOnPreviousData(A);
var C = getMoreDataFromServerWithAJAXCall(whatever2);
processAllDataAndShowResult(A,B,C);
Run Code Online (Sandbox Code Playgroud)
假如我可以通过回调来这些功能,我知道我可以使用关闭和lambda表达式来得到这样做的工作:
var A,B,C;
getDataFromServerWithAJAXCall(whatever, function(AJAXResult) {
A= AJAXResult;
getDataFromServerWithAJAXCallThatDependsOnPreviousData(A, function(AJAXResult2) {
B= AJAXResult2;
processAllDataAndShowResult(A,B,C);
});
});
getMoreDataFromServerWithAJAXCall(whatever2, function(AJAXResult) {
C= AJAXResult;
processAllDataAndShowResult(A,B,C);
});
function processAllDataAndShowResult(A,B,C) {
if(A && B && C) {
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但它对我来说感觉不对或不够干净.那么有更好的方法或至少更简洁的方式来做同样的事情,还是只是我不习惯javascript函数式编程?
顺便说一下,如果有帮助的话,我正在使用jQuery(1.4.2).
谢谢.