如何将变量从库传递到 Appcelerator/Titanium 中的控制器?

问题描述 投票:0回答:1

我试图将地理定位功能(获取纬度和经度)放入库中并返回纬度和经度,因为坐标是在整个应用程序中调用的。我可以从controller.js调用geo库,纬度和经度显示在控制台中,但是如何在controller.js的调用函数中使用坐标

在应用程序/lib/geo.js中

exports.getLongLat = function checkLocation(){
if (Ti.Geolocation.locationServicesEnabled) {
    Titanium.Geolocation.getCurrentPosition(function(e) {
        if (e.error) {
            Ti.API.error('Error: ' + e.error);
            } else {
                Ti.API.info(e.coords);
                var latitude = e.coords.latitude;
                var longitude = e.coords.longitude;
                console.log("lat: " + latitude + " long: " + longitude);
            }
        });
    } else {
        console.log('location not enabled');
}

};

控制器.js

geolocation.getLongLat(); //this calls the library, but I don't know how I can get the coordinates "back" into the controller.js file for using it in the var args below.

var args ="?display_id=check_if_in_dp_mobile&args[0]=" + lat + "," + lon;
controller geolocation appcelerator
1个回答
1
投票

为此创建一个可重用的库是一个好主意,而且您走在正确的道路上。

getCurrentPosition
的挑战在于它是异步的,因此我们必须以稍微不同的方式从中获取数据。

注意 geo.js 中的

Titanium.Geolocation.getCurrentPosition(function(e) {...
行,有一个函数被传递给
getCurrentPosition
。 这是一个“回调”函数,在手机收到位置数据后执行。这是因为 getCurrentPosition 是异步的,这意味着该回调函数中的代码直到稍后的时间点才会执行。我有一些关于异步回调的注释
here
对于 getLongLat 函数,我们需要做的主要事情是将回调传递给它,该回调又可以传递给 getCurrentPosition。 像这样的东西:

exports.getLongLat = function checkLocation(callback){ if (Ti.Geolocation.locationServicesEnabled) { //we are passing the callback argument that was sent from getLongLat Titanium.Geolocation.getCurrentPosition(callback); } else { console.log('location not enabled'); } };

然后当你执行该函数时,你将把回调传递给它:

//we moved our callback function here to the controller where we call getLongLat geolocation.getLongLat(function (e) { if (e.error) { Ti.API.error('Error: ' + e.error); } else { Ti.API.info(e.coords); var latitude = e.coords.latitude; var longitude = e.coords.longitude; console.log("lat: " + latitude + " long: " + longitude); } });

在这种情况下,我们基本上将最初传递给 
getCurrentPosition

的函数内容移至您在控制器中调用

getLongLat
的位置。 现在,当回调执行时,您将能够对坐标数据执行某些操作。

Titanium 应用程序中发生回调的另一个地方是使用

Ti.Network.HttpClient

发出网络请求。

Here
是一个类似的示例,说明您仅通过发出 HTTPClient 请求来为地理位置查询构建库。

© www.soinside.com 2019 - 2024. All rights reserved.