如何调用require()之外的require()内定义的函数?

时间:2017-08-14 03:02:31

标签: javascript html arcgis arcgis-js-api

我正在使用ArcGIS API for Javascript 3.21。我在require()中有一个函数。我希望在单击按钮时调用该函数,但该按钮在require()之外。

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//js.arcgis.com/3.7/js/esri/css/esri.css">
<style>
    html, body, #map {
    height: 100%;
    width: 100%;
    margin: 1;
    padding: 1; 
    }
</style>

<script src="//js.arcgis.com/3.7/"></script>
<script>

    var map;

    require([
      "esri/map", 
      "esri/geometry/Point",
      "esri/symbols/SimpleMarkerSymbol",
      "esri/graphic", 
      "esri/layers/GraphicsLayer",
      "dojo/domReady!"
    ], function(
      Map, Point, SimpleMarkerSymbol, Graphic, GraphicsLayer
    ) {
      map = new Map("map", {
      basemap: "gray",
      center: [10,10],
      zoom: 3
    });

    map.on("load", function() {
      var graphicslayer = new GraphicsLayer();
      map.addLayer(graphicslayer);
    });

   function hello(){
      alert("hello,world!");
   }   

});



</script>
</head>
<body>

    <button type="submit"class="searchButton"onclick="hello()">Search</button>
    <div id="map"></div>

</body>
</html>

我无法在onclick =“hello()”中调用hello(),因为hello()在require()中。

4 个答案:

答案 0 :(得分:3)

您的hello函数的作用域是require函数。您希望将其范围限定为全局对象,即您的案例中的窗口对象。所以:

function hello(){
    alert("hello,world!");
}   
window.hello = hello;

或直接

window.hello = function(){
    alert("hello,world!");
}

但是您也可以直接在javascript中将hello函数绑定到对象的click事件;你不必扩大你的职能范围。在dojo库中可能有这样做的方法。直接的javascript方式可能类似于

var myButton = document.querySelectorAll("button.searchButton")[0];
if (myButton) {
    myButton.addEventListener("click", hello);
}

答案 1 :(得分:0)

你不能在require中调用函数以便稍后使用,因为hello函数在匿名函数中,需要函数运行一次,并且不能恢复require函数内部的函数

所以,如果你需要随时打电话问好,你好必须在需要的地方。

答案 2 :(得分:0)

你也可以使用dojo模块&#34; On&#34; :

将此添加到您的require init:

require([...,"dojo/on",...], function(...,on,...) {

现在编写您的事件处理程序代码(假设您为按钮添加了一个id):

<button type="submit" class="searchButton" id="searchButton">Search</button>
on(dojo.byId('searchButton'), 'click', function(evt) {
  alert('hello');
});

答案 3 :(得分:0)

在require({....})中的任何函数都不会显示在onclick =&#39; xxx(&#39; bbb&#39;)&#39;

你有两个选择:

1)将此功能移到require({....})

之外

2)如果函数必须在require({....})内,那么你必须将它作为全局函数(如@Nicolas所说)

window.xxx = function(bbb){
        alert(bbb);
}