2015-01-09 129 views
0

当我尝试调用dojo模块中的函数时,我得到一个对象不支持属性或方法错误。我有一个主页和两个模块。我从主页面调用第一个模块,它起作用,我从第一个模块开始调用第二个模块,它可以工作,但是当我尝试从第二个模块调用第一个模块时出现错误。这里是我的代码:无法从另一个dojo模块调用dojo模块中的函数

主页:

<!DOCTYPE html> 
<html > 
<head> 
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/> 
    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dijit/themes/claro/claro.css"> 
    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/esri/css/esri.css"> 

<script> 
    var dojoConfig = { 
    parseOnLoad:true, 
    async: true, 
    isDebug:true, 
    packages: [ 
    {name: "Scripts", location: location.pathname.replace(/\/[^/]+$/, "") + "/Scripts"}, 
    ] 


}; 
</script> 
    <script> src="http://js.arcgis.com/3.10/"></script> 

    <script> 
     require(["Scripts/Mod1", "Scripts/Mod2"], 
     function (Mod1, Mod2) { 
      Mod1.M1Method("call from main page");//works great 
     }); 
    </script> 
</head> 
<body class="claro"> 
    <div>look here you</div> 
</body> 
</html> 

模块1:

define(["Scripts/Mod2"], 
function (Mod2) { 
    return { 

     M1Method: function (msg) { 
      alert(msg); 
      Mod2.M2Method("call from Mod1");//works great 
     }, 
     M1Method2: function (msg) { 
      alert(msg); 
     } 

    } 

}); 

模块2:

define(["Scripts/Mod1"], 
function (Mod1) { 
    return { 

     M2Method: function (msg) { 
      alert(msg); 
      Mod1.M1Method2("call from Mod2"); //JavaScript runtime error: Object doesn't support property or method 'M1Method2' 
     } 

    } 

}); 

我如何打这通电话从国防部2到MOD1 ?

谢谢

回答

0

您正在尝试执行循环依赖。在模块2中,使用require语句。试试这样的:

define(["require"], 
function (require) { 
    return { 
    M2Method: function (msg) { 
    alert(msg); 
    try { 
    require(["Scripts/Mod1"], function(Mod1) { 
     Mod1.M1Method2("call from Mod2"); 
    }); 
    } catch (dohObj) { 
    alert('Doh!, this failed. Stupid answer: ' + dohObj.message); 
    } 
    } 
    } 
} 
); 

你的html代码有一个错误,因为你在包含dojo.js的时候过早地用了'script'标签。应该像

<script type="text/javascript" src="http://js.arcgis.com/3.10/"></script> 

您需要先修复该文件以正确包含dojo和'require()'。

+0

谢谢你这样做 - 也得到了类型 – pvitt 2015-01-13 21:50:16

相关问题