在QooxDoo mobile中使用GeoLocation GeoPosition

时间:2012-11-28 12:19:24

标签: geolocation qooxdoo geopositioning

我有一个移动应用,我想使用地理定位。 我的问题是我不明白如何将lat / lon分配给Application.js中的属性,这样我就可以将其他页面绑定到它。

当我将位置绑定到Application.js中的latLon属性时,获取: 004930断言错误! position不是qx.bom.GeoLocation [99-0]上的数据(qx.event.type.Data)事件:预期'qx.event.type.Data'但找到'qx.event.type.GeoPosition'!

我尝试了一些变化,但我无法绑定到属性。

到目前为止我已经开始工作了,我可以调试位置:

  var loginPage = new sgmobile.page.Login();
  manager.addDetail(loginPage);

  loginPage.addListener("appear", function(evvt) {
    this.__getPosition();
  }, this);

  loginPage.show();

 ................

__getPosition : function() {
  var geoLocation = qx.bom.GeoLocation.getInstance();
  var pos = geoLocation.getCurrentPosition();
  geoLocation.addListener("position", this.__applyPosition);
},

__applyPosition : function(position) {
  this.latlon = {
    "lat" : position.getLatitude(),
    "lon" : position.getLongitude()
  }
  this.debug("latlon: " + qx.lang.Json.stringify(this.latlon));
},

我还复制了邮件列表。

最诚挚的问候, 亚历克斯

2 个答案:

答案 0 :(得分:3)

数据绑定要求数据事件可绑定。由于GeoLocation事件不是数据事件,因此默认情况下不可绑定。如果您想拥有该绑定,我建议您将属性添加到要绑定的应用程序中,并使用事件侦听器手动将这些属性与地理位置事件相关联。

答案 1 :(得分:1)

在我看到Martin的回答之前,我找到了自己喜欢的解决方案。它看起来效率不高但是使用对象作为属性我无法获得绑定到属性属性的输入。读马丁的回答,我走的是正确的方式。

希望这有助于其他一些qooxdoo mobile newby。

我将Application.js更改为:

lat: {
  check : "Number",
  nullable : true,
  init : null,
  event : "changeLat"
},
lon: {
  check : "Number",
  nullable : true,
  init : null,
  event : "changeLon"
},

__applyPosition : function(positionEvent) {
  this.debug("lat: " + positionEvent.getLatitude() + " lon: " + positionEvent.getLongitude());
  this.setLat( positionEvent.getLatitude() );
  this.setLon( positionEvent.getLongitude() );
},

我将'lat'和'lon'属性绑定到reportPage中的相应属性,如下所示:

  this.bind("lon", reportPage, "lon");
  this.bind("lat", reportPage, "lat");

为了完整;相关的报告页面代码:

    var lat = new  qx.ui.mobile.form.NumberField();
    lat.setEnabled(false);
    form.add(lat, "latitude");

    var lon = new  qx.ui.mobile.form.NumberField();
    lon.setEnabled(false);
    form.add(lon, "longtitude");

    this.bind('lat', lat, 'value');
    this.bind('lon', lon, 'value');

    ..............
properties: {
  lat: {
    check : "Number",
    nullable : true,
    init : null,
    event : "changeLat"
  },
  lon: {
    check : "Number",
    nullable : true,
    init : null,
    event : "changeLon"
  }
}