2015-01-09 4 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' 
     } 

    } 

}); 

Как я могу сделать этот призыв от Mod 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 type="text/javascript" src="http://js.arcgis.com/3.10/"></script> 

Вам необходимо исправить этот файл первой правильно включать додзё и «требуют()».

+0

Спасибо, что сделал трюк - тоже получил тип – pvitt

Смежные вопросы