钛-将变量传递到新窗口 [英] Titanium - Passing Variable to new window

查看:76
本文介绍了钛-将变量传递到新窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在iPhone Titan App中传递变量时遇到问题.以下是我的AppTabGroup.js文件.有一个名为"grantEntrance"的事件侦听器.启用此选项后,我需要将变量event.name和event.email传递给所有新选项卡.由于某种原因,这对我不起作用.我最终收到未定义的错误.我想我的问题是如何设置全局变量?像event.name一样,它可以显示在应用程序中的任何位置.

I am having a problem passing variables in my iphone titanium App. Below is my AppTabGroup.js file. There is an event listener called 'grantEntrance'. When this is fired I need the variables event.name and event.email passed to all the new tabs. For some reason this is not working for me. I end up getting undefined errors. I think my question is how do I set global variables? Like event.name so it shows up anywhere in the application.

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;

推荐答案

app.js文件中定义的变量在所有其他JS文件中均应可用.但是,您应该为这些全局变量创建一个命名空间,以确保它们不会干扰任何其他变量.

Variables defined in the app.js file should be available in all other JS files. You should create a namespace for these global variables however, to make sure that they don't interfere with any other variables.

这是您可能如何做的一个例子.在app.js中:

Here's an example of how you might do it. In app.js:

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

然后,您可以通过引用从应用程序中的任何位置获取并设置这些值:

Then you can get and set these values from anywhere in your application by referencing:

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


但是,在应用执行之间不会存储这些值.如果停止应用程序,然后重新启动,这些变量将丢失,直到您再次设置它们.如果您希望存储信息以便在应用程序重新启动后可以再次访问它们,则可以使用Ti.App.Properties来存储它们.


However, these values won't be stored in between executions of you app. If you stop your app, and start it again, those variables will be lost until you set them again. If you are looking to store the information so that you can access them again after application restart, perhaps use the Ti.App.Properties to store them.

这里提供了有关存储信息的不同方式的信息:

There is information on the different ways to store information here:

https://wiki.appcelerator.org/display/指南/使用+本地+数据+来源

这篇关于钛-将变量传递到新窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆