如何从自定义dojo模块获取值?

时间:2015-11-02 15:03:24

标签: javascript dojo

我正在编写我编写的应用程序的模块化过程。这适用于空间位置

我正在使用一个事件来查询用户的lat / lon位置,以便在应用程序中使用。我的呼叫片段在下面(按钮点击启动它)

<script>
    require([
        'dojo/dom',
        'dojo/_base/array',
        'demo/testModule',
        'esri/SpatialReference',
        'esri/geometry/Point'
    ], function (
        dom,
        arrayUtils,
        testModule,
        SpatialReference,
        Point
     ) {
        //Here is the button click listener
        $('#whereAmIButton').click(function () {
            var spatialRef = new esri.SpatialReference({ 'wkid': 4326 });

            //variable I want to set to a returned geometry.
            var myGeom;

            //This runs but I'm missing the boat on the return of a value
            testModule.findUserLocPT(spatialRef);

            //var myModule = new testModule(); //not a constructor
        });
    });
</script>

这是自定义模块。它将信息记录到控制台以获取用户的位置。但我想返回设置'myGeom'变量的值。

define(['dojo/_base/declare','dojo/_base/lang','dojo/dom',
'esri/geometry/Point','esri/SpatialReference'], function (
    declare, lang, dom, Point, SpatialReference) {
return {
    findUserLocPT: function (spatialRef) {
        var geom;
        var location_timeout = setTimeout("geolocFail()", 5000);
        navigator.geolocation.getCurrentPosition(function (position) {
            clearTimeout(location_timeout);

            var lat = position.coords.latitude;
            var lon = position.coords.longitude;

            setTimeout(function () {
                geom = new Point(lon, lat, spatialRef);
                //console.log writes out the geom but that isnt what I am after
                console.log(geom);
                //I want to return this value
                return geom;
            }, 500);
        });
        function geolocFail() {
            console.log("GeoLocation Failure");
        }
    }
}//end of the return

});

欢迎任何帮助。我可以通过引用来更改文档上的textual / html值,但不会将其作为变量返回。

安迪

1 个答案:

答案 0 :(得分:0)

好的,我不知道这是不是最好的&#39;回答,但我现在有一个。

我在&#39; test.html&#39;中添加了一个全局变量。页

 <script>
    var theGeom;  //This is the variable
    require([
        'dojo/dom',

这里是我设置此变量的值的地方,用于原始道场&#39;要求&#39;代码块。这来自于&#39; testModule.js&#39;

setTimeout(function () {
    geom = new Point(lon, lat, spatialRef);                                     
    theGeom = geom;    //Here is the feedback of the value to the global variable.                 
    return myGeom;
}, 500);


$('#whereAmIButton').click(function () {
    var spatialRef = new esri.SpatialReference({'wkid':4326});              
    testModule.findUserLocPT(spatialRef);               
    setTimeout(function () {
        console.log(theGeom);   //here is the value set and ready to use
            },2000);
});

我不确定这是不是最好的方法。如果你有更好的东西请告诉我。

安迪