如何使用 Appcelerator/Titanium 动态显示标签?

How to show Tabs dynamically with Appcelerator/Titanium?

我制作了一个基于选项卡的应用程序,并希望 show/hide 根据用户是否登录来选择登录或用户配置文件选项卡。我怎样才能做到这一点?我尝试设置选项卡的可见 属性,但这不起作用,两个选项卡都可见。

如果有条件地设置两个选项卡效果不佳,有没有办法动态更改 src 文件的加载?我不想将配置文件和 login/register 函数放在一个文件中。

index.xml:

<Alloy>
<TabGroup id="root">
    <Tab id="profile" visible="false" title="Profile" icon="KS_nav_views.png">
        <Require type="view" src="profile" />
    </Tab>
    <Tab id="login" title="Login" icon="KS_nav_views.png">
        <Require type="view" src="modalLogin" />
</TabGroup>
</Alloy>

index.js ()

// open TabGroup
$.root.open();
var userStatus = "loggedin";
showProfile(userStatus);
function showProfile(user){
  if (user == "loggedin") {
    $.login.visible = false;
    $.profile.visible = true;
    console.log("user is logged in");
  } else {
    $.profile.visible = false;
    $.login.visible = true;
    console.log("user is not logged in");
  }
}

根据 Titanium.UI.TabGroup 文档:

...Tabs cannot be removed from the tab group once added, and tabs cannot be reordered.

根据我的经验,TabGroup 组件 确实 受限,并且大部分被开发人员定制的组件所取代。也许你也是这样!

至于动态 Require 源文件,我建议 creating/removing 根据您的需要以编程方式查看元素,而不是将其插入 XML。再一次,我在动态改变视图元素方面的经验并不是最好的:当我尝试这样做时会出现疯狂的错误。

所以,我更喜欢完全销毁一个元素并插入另一个元素'by hand'。

但是,嘿,试试吧!您可能会遇到更好的解决方案 =) 仅供参考,这里是 Require 标签上的 the iffy documentation