从不同URL中的选项卡更改活动选项卡?

时间:2013-10-03 15:48:59

标签: tabs titanium ios7 appcelerator appcelerator-mobile

我有以下设置:在ApplicationTabGroup.js我有一个标签组

var tabGroup = Ti.UI.createTabGroup();有两个标签。

其中一个标签调用外部URL,这是代码

//Restaurant Window
    var restaurant = Titanium.UI.createWindow({
        tabBarHidden:true,
        color: '#FFF',
        url: 'restaurants.js',
        navBarHidden:false,
        statusBarStyle: Titanium.UI.iPhone.StatusBar.TRANSLUCENT_BLACK
    });


    var tab2 = Ti.UI.createTab({
        title:"x",
        color: '#FFF',
        backgroundColor:'#00c0f3',
        window: restaurant
    });

我用像这样的

这样的EventListener打开该选项卡

tabGroup.setActiveTab(tab2).open();

问题是来自restaurant.js我不知道如何返回第一个标签或任何其他标签,因为tabgroup中的restaurant.js未定义。

如何在ApplicationTabGroup.js中定义标签组时,如何浏览在不同网址中调用的标签?

我正在使用 - iOS7 - SDK 3.1.3 GA

非常感谢任何正确方向的小贴士!

1 个答案:

答案 0 :(得分:3)

由于这个原因,你真的不应该使用url属性,因为它会创建一个完全不同的JS上下文,而是应该将您的选项卡窗口(restaurants.js)包装在CommonJS样式模块中。

但是,如果你不想制作这个模块,你应该只能将tabGroup作为窗口的属性添加如下:

var restaurant = Titanium.UI.createWindow({
    tabBarHidden:true,
    color: '#FFF',
    url: 'restaurants.js',
    navBarHidden:false,
    statusBarStyle: Titanium.UI.iPhone.StatusBar.TRANSLUCENT_BLACK
});
restaurant.myTabGroup = tabGroup;

然后你可以在restaurants.js文件中导航到这样的不同标签:

// Set active tab to the third tab
Titanium.UI.currentWindow.myTabGroup.setActiveTab(3).open();

我强烈建议你去模块路径。

模块

编辑 :这是尝试使用寄生继承模块化您的窗口。看看this guide for more detail.

function MyWindow(parentTabGroup) {
    var restaurant = Titanium.UI.createWindow({
        tabBarHidden:true,
        color: '#FFF',
        navBarHidden:false,
        statusBarStyle: Titanium.UI.iPhone.StatusBar.TRANSLUCENT_BLACK
    });

    // Here is where you add all the controls and views you had put inside  
    // 'restaurant.js'.....
    // Also, if you have an event listener you can call the tab group
    button.addEventListener('click', function(e) {
         parentTabGroup.setActiveTab(3);
    });
    return restaurant;
}
module.exports = MyWindow;

现在您可以创建窗口并将其添加到选项卡组,如下所示:

var MyWindow = require('MyWindow');
var mywin = new MyWindow(tabGroup);
var tab2 = Ti.UI.createTab({
    title:"x",
    color: '#FFF',
    backgroundColor:'#00c0f3',
    window: mywin
});