【问题标题】:Titanium tabs accumulating when opening new windows打开新窗口时累积的钛标签
【发布时间】:2014-05-07 03:37:35
【问题描述】:

我有一个像这样的行中的课程列表:

每当我单击一行时,都会创建一个新选项卡,并且会在该选项卡中添加一个新窗口,以显示课程信息。

然后,如果我按下返回,它会返回课程窗口,这很棒,但是当我单击另一门课程时,它会将其添加到选项卡列表中,所以它开始看起来像这样:

然而,这里应该只有两个选项卡,“课程”选项卡和“获取课程”选项卡。


在 get_courses.js(处理创建行的文件)中,我有这个事件侦听器,每次单击一行时都会创建一个新选项卡(我确定这是我的错误所在,我只是没有确定如何解决它):

table.addEventListener("click",function(e){
    var courseInfo_window = Titanium.UI.createWindow({
        title:e.rowData.title,
        url:'get_courseInfo.js',
        courseIMISCode: e.rowData.courseIMISCode
    });

    var courseInfo_tab = Titanium.UI.createTab({
        title:'Course Info',
        window:courseInfo_window
    });
    Titanium.UI.currentTabGroup.addTab(courseInfo_tab); 
});

我想在那里创建一个课程信息选项卡,但是在 get_courseInfo.js 中我有这个,可能是多余的代码:

Ti.UI.currentTabGroup.activeTab.open(courseInfo_window);

在我的菜鸟看来,打开我的 courseInfo_window 似乎是必要的,但正在累积底部的选项卡(如前图所示)。

TL;DR:我需要做什么(可能在 get_courses.js 中)来更新“课程信息”选项卡,而不是为每行点击打开一个新选项卡?

【问题讨论】:

    标签: tabs titanium


    【解决方案1】:

    您可以通过tabs property 访问 TabGroup 中的选项卡。但是,保留对您在事件侦听器外部创建的选项卡的引用并在内部进行修改会更容易:

    var courseInfo_tab = null;
    
    table.addEventListener("click",function(e){
        var courseInfo_window = Titanium.UI.createWindow({
            title:e.rowData.title,
            url:'get_courseInfo.js',
            courseIMISCode: e.rowData.courseIMISCode
        });
        if (courseInfo_tab === null) {
            courseInfo_tab = Titanium.UI.createTab({
                title:'Course Info',
                window:courseInfo_window
            });
            Titanium.UI.currentTabGroup.addTab(courseInfo_tab); 
        } else {
            courseInfo_tab.window = courseInfo_window;
        } 
    });
    

    【讨论】:

    • 我在 courseInfo_tab.window = courseInfo_window 上得到一个错误; “'null'不是一个对象......”我认为这是因为选项卡实际上是在if内部创建的,所以它不是在else中创建的。那么如何引用已经存在的选项卡呢?
    猜你喜欢
    • 2014-11-05
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多