比如引用某个函数需要调用另外一个函数,则不能异步调用,需要改成同步方式,比如:
- //函数一:加载combobox组件
- function one(){
- using('combogrid',function(){
- $("#ad_type").combobox({
- onChange:function(record, oldValue){
- $("#pro_id").combogrid('changeRequired',false);
- ........
- }
- });
- });
- }
复制代码- //函数二:加载另一个combobox组件
- function two(){
- using('combogrid',function(){
- $('#pro_id').combogrid({
- panelHeight: 350,
- panelWidth: 450,
- required: false,
- ........
- });
- });
- }
复制代码很明显函数一要用到函数二加载的组件,此时由于函数二存在回调函数,会导致异步加载,调用函数一的时候这行代码$("#pro_id").combogrid('changeRequired',false);
会出错。
改进:重新定义函数二,增加一个形参func,将函数一的函数名作为参数传递给函数二,并且在函数二中的异步函数中调用函数一,初始化加载这两个combobox组件时,先调用函数二,完美解决。
- function two(func){
- using('combogrid',function(){
- $('#pro_id').combogrid({
- panelHeight: 350,
- panelWidth: 450,
- required: false,
- ........
- });
- func();//内部调用
- });
- }
- //初始化函数
- function init()
- {
- two(one);
- }
复制代码还有一种所谓的笨办法,但是治标不治本:就是延迟被依赖函数的调用方代码,目的是想使得被依赖的函数能够在被引用之前就加载完成以免报错,然而在某些情况下延迟并不起作用,因为本质还是异步加载不是同步加载,不建议采用这种方式。