查看: 2857|回复: 0

[HTML代码] 基于jquery的easyUI异步调用问题

发表于 2018-2-12 08:00:01

比如引用某个函数需要调用另外一个函数,则不能异步调用,需要改成同步方式,比如:

  1. //函数一:加载combobox组件
  2. function one(){
  3. using('combogrid',function(){
  4. $("#ad_type").combobox({
  5. onChange:function(record, oldValue){
  6. $("#pro_id").combogrid('changeRequired',false);
  7. ........
  8. }
  9. });
  10. });
  11. }
复制代码
  1. //函数二:加载另一个combobox组件
  2. function two(){
  3. using('combogrid',function(){
  4. $('#pro_id').combogrid({
  5. panelHeight: 350,
  6. panelWidth: 450,
  7. required: false,
  8. ........
  9. });
  10. });
  11. }
复制代码

很明显函数一要用到函数二加载的组件,此时由于函数二存在回调函数,会导致异步加载,调用函数一的时候这行代码$("#pro_id").combogrid('changeRequired',false);会出错。
改进:重新定义函数二,增加一个形参func,将函数一的函数名作为参数传递给函数二,并且在函数二中的异步函数中调用函数一,初始化加载这两个combobox组件时,先调用函数二,完美解决。

  1. function two(func){
  2. using('combogrid',function(){
  3. $('#pro_id').combogrid({
  4. panelHeight: 350,
  5. panelWidth: 450,
  6. required: false,
  7. ........
  8. });
  9. func();//内部调用
  10. });
  11. }
  12. //初始化函数
  13. function init()
  14. {
  15. two(one);
  16. }
复制代码

还有一种所谓的笨办法,但是治标不治本:就是延迟被依赖函数的调用方代码,目的是想使得被依赖的函数能够在被引用之前就加载完成以免报错,然而在某些情况下延迟并不起作用,因为本质还是异步加载不是同步加载,不建议采用这种方式。



回复

使用道具 举报