可以从另一个对象更新javascript对象属性

时间:2011-04-17 05:29:51

标签: javascript object appcelerator

问候,

我一直在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命名空间之外,因此无法以这种方式访问​​它。

有人能指出我正确的方向吗?

谢谢,

乔西

1 个答案:

答案 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