在两个js文件之间共享全局变量

时间:2013-09-05 10:03:24

标签: javascript titanium global-variables

我正在使用两个js文件并在钛应用程序之间共享它们之间的变量。在我的主app.js中,我有3个变量与表中的每一行相关联。我有一个事件监听器,用于单击某行以打开其组件位于单独的js文件中的模式视图。我的三个变量在下面,在click事件中我有3个变量和3个全局变量的警报。

var titleText = titleInRow.text;
var artistText=artistInRow.text;

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

var rowNumber=e.row.name;
Ti.App.myGlobalRowNumber= rowNumber;

alert("titleText is: "+titleText+" and /n artistText is "+artistText+ " and /n row number is "+rowNumber +"/n TiAppmyGlobalSongVar is "+Ti.App.myGlobalSongVar+ " /n TiAppmyGlobalArtistVar is "+Ti.App.myGlobalArtistVar);

这些都返回了正确的结果。然后在我的第二个js文件中,我也有以下警告:

alert("\n TiAppmyGlobalSongVar in modal is "+Ti.App.myGlobalSongVar+ " \n TiAppmyGlobalArtistVar in modal is "+Ti.App.myGlobalArtistVar + "TiAppmyGlobalRowNumber in modal is "+Ti.App.myGlobalRowNumber);

在第二个js文件中第一次单击一行时,我的第二个警报的变量都是未定义的。我第二次点击它们都是定义但有时是错误的。它似乎给出了我第一次点击的行的变量结果,这是未定义的。希望这个问题很明确。我做错了什么?

更新请阅读!! 最后,在尝试之后:

Titanium.API.titleText = titleText;
Titanium.API.artistText = artistText;

Ti.App.Properties.setString('globalTitleText', titleText);
Ti.App.Properties.setString('globalArtistText', artistText);

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

(ALL全部工作第二次,但未定义为第一次), 唯一有效的方法是在我的表事件监听器中触发此事件:

Ti.App.fireEvent('myCustomEvent', {
          myTitleText: titleText,
          myArtistText: artistText
        });

并在我的第二个js文件中有这个:

var globalTitleText;
var globalArtistText;
    Ti.App.addEventListener('myCustomEvent', function(event) {
            globalTitleText=event.myTitleText;
            globalTitleText=event.myTitleText;
            //Ti.App.globalTitleText=event.myTitleText;
            //Ti.App.globalArtistText=event.myArtistText;
            alert('You sent me: '+event.myTitleText+" and "+event.myArtistText);
    });

//However I can't use it here in my second js file (outside the custom event listener) as it is undefined. 

有人可以帮我解决问题的最后一点吗? 我仍然不知道为什么其他方法不起作用。我之前在不同的环境中使用它们并且它们确实有效,但不是在这个特定的情况下!

2 个答案:

答案 0 :(得分:1)

以下代码是否在eventListener中?

var titleText = titleInRow.text;
var artistText=artistInRow.text;

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

var rowNumber=e.row.name;
Ti.App.myGlobalRowNumber= rowNumber;

因为您的变量是全局变量,所以需要在eventListener函数之外声明它们。类似的东西:

var rowNumber;
tableView.addEventListener('click',function(e) {
    rowNumber = e.rowIndex;
}
如果在App.js中声明,

rowNumber将是全局的,而:

tableView.addEventListener('click',function(e) {
    var rowNumber;
    rowNumber = e.rowIndex;
}

不会。

答案 1 :(得分:0)

请在钛开发者论坛中浏览此链接

Global Variables in Titanium

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

在这种情况下最好传递自己的对象。

Passing object as global variable

请查看并告诉我

注意:还声明App.js中的变量:)如果要修改任何值,则在其他JS中执行。