无法从另一个dojo模块调用dojo模块中的函数

时间:2015-01-09 20:33:34

标签: javascript dojo

当我尝试在dojo模块中调用函数时,我得到一个Object不支持属性或方法错误。我有一个主页和两个模块。我从主页调用第一个模块并且它工作,我从第一个模块调用第二个模块并且它可以工作,但是当我尝试从第二个模块调用第一个模块时,我收到错误。这是我的代码:

主页:

<!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'
        }

    }

});

如何将调用从Mod 2调用到Mod1?

由于

1 个答案:

答案 0 :(得分: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()'。