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

Sharing global variables between two js files

本文关键字:文件 之间 共享 全局变量 js 两个      更新时间:2023-09-26

我正在处理两个js文件,并在一个钛应用程序中共享它们之间的变量。在我的主应用程序.js中,我有3个变量与表中的每一行相关联。我有一个事件监听器,用于当单击一行打开一个模态视图时,该视图的组件在一个单独的js文件中。下面是我的三个变量,在点击事件中,我会收到三个变量和三个全局变量的警报。

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. 

有人能帮我解决最后一点问题吗?我仍然不知道为什么其他方法不起作用。我以前在不同的环境中使用过它们,它们确实有效,但在这个特定的例子中没有!

以下代码是否在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;
}

不会。

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

钛的全局变量

最好还是传递你自己的对象,在这种情况下它是有效的。

将对象作为全局变量传递

请检查一下,让我知道

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