我有一个移动应用程序,我想使用它的地理位置。我的问题是我不明白如何将 lat/lon 分配给应用程序中的属性.js因此我可以将其他页面绑定到它。
当我将位置绑定到应用程序中的 latLon 属性时.js得到:004930 断言错误!position 不是 qx.bom.GeoLocation[99-0][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));
},
我还复制了邮件列表。
此致敬意亚历克斯
数据绑定要求数据事件可绑定。由于地理位置事件不是数据事件,因此默认情况下不可绑定。如果要绑定该属性,我建议将属性添加到要绑定的应用程序,并使用事件侦听器将这些属性手动与地理位置事件连接。
在我看到马丁的答案之前,我找到了我喜欢分享的自己的解决方案。它看起来不是很有效,但是使用对象作为属性,我无法将输入绑定到属性的属性。读了马丁的回答,我走对了路。
希望这对其他一些qooxdoo移动新手有所帮助。
我将应用程序.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"属性绑定到报告页面中的相应属性,如下所示:
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"
}
}