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

Javascript 在两个js文件之间共享全局变量,javascript,titanium,global-variables,Javascript,Titanium,Global Variables,我正在使用两个js文件,并在钛合金应用程序中共享它们之间的变量。在我的main app.js中,我有3个变量与表中的每一行关联。我有一个事件监听器,当单击一行打开一个模态视图时,该视图的组件位于一个单独的js文件中。下面是我的三个变量,在单击事件中,我有一个关于三个变量和三个全局变量的警报 var titleText = titleInRow.text; var artistText=artistInRow.text; Ti.App.myGlobalSongVar = titleText; T

我正在使用两个js文件,并在钛合金应用程序中共享它们之间的变量。在我的main app.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.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. 
有人能帮我解决这个问题的最后一点吗?
我仍然不知道为什么其他方法不起作用。我以前在不同的环境中使用过它们,它们确实有效,但在这个特定的例子中没有

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

而且最好传递你自己的对象,在这种情况下它会工作

请检查一下,让我知道


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

以下代码是否在eventListener中

因为要使变量是全局变量,需要在eventListener函数之外声明它们。比如:

var rowNumber;
tableView.addEventListener('click',function(e) {
    rowNumber = e.rowIndex;
}
行数
如果在App.js中声明,则将是全局的,而:

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

不会的。

@Iopa我在您的第一个链接中尝试了该方法,即Titanium.API.titleText=titleText;等等,但那做了同样的事情。在我第一次单击行和第二次定义行时,它没有定义,但似乎给了第一次单击的行的变量值。请尝试创建一个对象,如etitanium.API.titleText={name:titleText},然后尝试在应用程序中定义它们。js@Iopa谢谢你的回复。我还使用Ti.App.properties尝试了get和set字符串方法。得到了完全相同的结果。我只需要分享两条线。如何创建对象?@Iopa,然后如何从第二个js引用它?谢谢。这让我找到了解决方案,我让它工作的唯一方法是:var titleText;艺术文本;变量行数;tableView.addEventListener(“单击”,函数(e){titleText=titleInRow.text;artistText=artistInRow.text;Ti.App.myGlobalSongVar=titleText;Ti.App.myGlobalArtistVar=artistText;var rowNumber=e.row.name;Ti.App.myGlobalRowNumber=rowNumber;});然后我可以在第二个js中访问Ti.App.MyglobalArtistVar、Ti.App.MyglobalSongVar等:)
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;
var rowNumber;
tableView.addEventListener('click',function(e) {
    rowNumber = e.rowIndex;
}
tableView.addEventListener('click',function(e) {
    var rowNumber;
    rowNumber = e.rowIndex;
}