Titanium Alloy - 创建屏幕后如何 运行 程序

Titanium Alloy - How to run procedure after screen created

我正在尝试更新地图视图中的当前位置。我得到控制器中的当前位置:

var updateCurrentLocation = function updateCurrentLocation(e){
Ti.API.info("Update current location on map");

$.map.setLocation({
    latitude: e.coords.latitude,
    longitude: e.coords.longitude,
    latitudeDelta: 1,
    longitudeDelta: 1
});
}

但是问题是此时代码运行,地图视图还没有创建,所以不能更新当前位置。 任何人都可以建议一些技术来解决这个问题吗? 谢谢!

您不是在同一控制器中创建地图吗?如果您只是将代码放在地图代码之后,但这是显而易见的,所以我假设您已经想到了这一点。

为什么在创建地图时不将坐标设置为当前用户坐标?

最坏的情况,如果你想在 500 毫秒后调用 updateCurrentLocation 函数,你可以使用 setTimer(, timer ms) 在设定的时间后调用函数。这并不理想。

starting up the map controller

function showMap() {
    // create the new controller and pass in the
    // model object as an argument 'item'
    var ctrl = Alloy.createController('MapView', {
        'item' : args.item // <-- pass is information + coords for map
    });

    setTimeout(function() {
        args.photoListTab.open(ctrl.mainWindow);
    }, 200);
}

in map controller

// get the photo object from the parameters
var coords = args.item.custom_fields.coordinates[0];
var locationString = args.item.custom_fields.location_address;

// create annotation
var annotation = Alloy.Globals.Map.createAnnotation({
  latitude : Number(coords[1]),
  longitude : Number(coords[0]),
  title : args.item.custom_fields.location_string,
  myid : args.item.id
});

完整的解决方案在这里https://github.com/aaronksaunders/testInClass

最后我发现地图视图上有一个事件调用 "complete"。因此,要在地图加载后执行您希望发生的任何事情,请在地图控制器中使用:

$.map.addEventListener('complete', function(e) {
   Ti.API.info("Map controller: on Map complete");
   $.trigger('complete', e); // Trigger event for other controller can listen too.
   // And you can do other logic here.
});

引用自Titanium Doc