1

地理位置情報を使用したいモバイル アプリがあります。私の問題は、緯度/経度を Application.js のプロパティに割り当てる方法がわからないため、他のページをそれにバインドできることです。

Application.js の latLon プロパティに位置をバインドすると、get: 004930 アサーション エラーです。位置は、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));
},

メーリングリストもコピーしました。

宜しくお願いします、アレックス

4

2 に答える 2

3

データ バインディングでは、データ イベントがバインド可能である必要があります。GeoLocation イベントはデータ イベントではないため、デフォルトではバインドできません。バインドしたい場合は、バインドするプロパティをアプリケーションに追加し、これらのプロパティを手動でイベント リスナーを使用してジオロケーション イベントに接続することをお勧めします。

于 2012-11-28T14:18:32.357 に答える
1

マーティンの答えを見る前に、私は共有したい自分自身の解決策を見つけました。あまり効率的ではありませんが、オブジェクトをプロパティとして使用すると、プロパティのプロパティにバインドするための入力を取得できませんでした。マーティンの答えを読んで、私は正しい道を進んだ。

これが他のqooxdoomobilenewbyに役立つことを願っています。

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");

完全を期すために; 関連するreportPageコード:

    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"
  }
}
于 2012-11-28T14:35:22.377 に答える