问候,
我一直在appcelerator中处理自定义命名空间,但是在某些Titanium对象中更新全局命名空间变量时遇到了问题。
我有一个名为“ myObj ”的包装器,而myObj内部是另一个名为“ globals ”的对象,它包含在整个命名空间中设置和使用的变量。 / p>
myObj.globals = {
userBalance: null,
userAuthenticated: false,
deviceGeoActive: false
}
所以我为地理定位模块创建了一个自定义包装器,在该包装器内部是标准的 Ti.Geolocation.getCurrentPosition(e)函数以及一些与应用程序一起使用的自定义内容。
在Ti.Geolocation.getCurrent ...(e)内部,我检查设备上是否有可用的位置服务,并且已获得该应用的授权。然后我想更新myObj中的 deviceGeoActive 对象属性。
Ti.Geolocation.getCurrent...(e){
if (e.success){
myObj.globals.deviceGeoActive = true
}
}
通过这种方式,我可以随时随地检查设备是否已启用Geo。
为什么我认为它失败了(这是猜测,我在javascipt上相当新)是因为Ti在myObj命名空间之外,因此无法以这种方式访问它。
有人能指出我正确的方向吗?
谢谢,
乔西
答案 0 :(得分:0)
感谢@Khez帮助我实现这一点!
我能想到的唯一解决方案是在两种情况下都使用window.myObj以确保适当的范围。让我知道这个结果 - @khez
Titanium Appcelerator 在窗口命名空间内不起作用,但您的建议确实让我考虑将 myObj 添加到全局 Ti (或Titanium)命名空间。
所以一开始我就有了这个:
var myObj = {}
但 Ti 忽略了 myObj 。
要将其添加到全局 Titanium 命名空间,我将其修改为:
Ti.myObj = {}
myObj = Ti.myObj;
这样任何对myObj的调用都不需要改为引用Ti。
这意味着myObj现在是父(全局)Ti命名空间的子级。
再次感谢Khez