0

iphone チタン アプリで変数を渡す際に問題が発生しています。以下は私の AppTabGroup.js ファイルです。「grantEntrance」というイベントリスナーがあります。これが発生すると、変数 event.name と event.email がすべての新しいタブに渡される必要があります。何らかの理由で、これは私にとってはうまくいきません。結局、未定義のエラーが発生します。私の質問は、グローバル変数をどのように設定するのですか? event.name と同様に、アプリケーションのどこにでも表示されます。

function AppTabGroup() {
//declare module dependencies
var AppWindow = require('ui/AppWindow');
var OverviewWindow = require('ui/OverviewWindow');
var LeadWindow = require('ui/LeadWindow');
var CaseWindow = require('ui/CaseWindow');
var ResourcesWindow = require('ui/ResourcesWindow');

//create module instance
var self = Ti.UI.createTabGroup();

//create app tabs
var win1 = new OverviewWindow(L('Login')),
    win2 = new CaseWindow(L('Cases'));
    win3 = new LeadWindow(L('Leads'));
    win4 = new ResourcesWindow(L('Resources'));

var tab1 = Ti.UI.createTab({
    title: L('Login'),
    icon: '/images/KS_nav_ui.png',
    window: win1
});
win1.containingTab = tab1;

var tab2 = Ti.UI.createTab({
    title: L('Cases'),
    icon: '/images/KS_nav_views.png',
    window: win2
});
win2.containingTab = tab2;

var tab3 = Ti.UI.createTab({
    title: L('Leads'),
    icon: '/images/KS_nav_views.png',
    window: win3
});
win3.containingTab = tab3;

var tab4 = Ti.UI.createTab({
    title: L('Resources'),
    icon: '/images/KS_nav_mashup.png',
    window: win4
});
win4.containingTab = tab4;

//Load Initial Login tab
self.addTab(tab1);

//If Login is successful then the below even will fire and the other tabs will be loaded
Ti.App.addEventListener('grantEntrance', function(event)  
{
win2.name       = event.name;  
win2.email      = event.email;
self.addTab(tab2);
self.addTab(tab3);
self.addTab(tab4);
self.removeTab(tab1);

});  



return self;
};

module.exports = AppTabGroup;

以下は私のCaseWindow.jsタブです

function AppWindow(title) {
var Main = Ti.UI.createWindow({
    title:title,
    backgroundColor:'white'
});

//Closed Case Button
var ccButton = Titanium.UI.createButtonBar({
    labels:['Closed'],
    backgroundColor:'#336699'
});
Main.setLeftNavButton(ccButton);

//New Case Button
var ncButton = Titanium.UI.createButtonBar({
    labels:['New Case'],
    backgroundColor:'#336699'
});
Main.setRightNavButton(ncButton);

ncButton.addEventListener('click', function() {
    //containingTab attribute must be set by parent tab group on
    //the window for this work
    Main.containingTab.open(Ti.UI.createWindow({
        title: L('newCaseWindow'),
        backgroundColor: 'white'
    }));
});

var msg = Titanium.UI.createLabel({  
text:"Your Name is " + win.name,
//text:"You have successfully logged in. Upon logging in we sent back your email address and your name. You can pass all kinds of data simply by creating objects on your window.\n\nYour email is:\n" + email + "\n\nyour name is:\n" + name,  
top:10,  
left:10,  
width:300,  
height:'auto'  
});  
    Main.add(msg);  

    return Main;
};

module.exports = AppWindow;
4

1 に答える 1

2

app.js ファイルで定義された変数は、他のすべての JS ファイルで使用できる必要があります。ただし、これらのグローバル変数の名前空間を作成して、他の変数に干渉しないようにする必要があります。

これを行う方法の例を次に示します。app.js で:

var MyGlobalVars = {
    email: null,
    name: null
};

次に、以下を参照して、アプリケーションのどこからでもこれらの値を取得および設定できます。

MyGlobalVars.email = 'me@gmail.com';
alert('My email is: '+MyGlobalVars.email);

ただし、これらの値はアプリの実行間では保存されません。アプリを停止して再起動すると、これらの変数は再度設定するまで失われます。アプリケーションの再起動後に再度アクセスできるように情報を保存する場合は、おそらく Ti.App.Properties を使用してそれらを保存します。

ここに情報を保存するさまざまな方法に関する情報があります。

https://wiki.appcelerator.org/display/guides/Working+with+Local+Data+Sources

于 2012-04-11T11:05:28.667 に答える