Javascript 钛合金不加载菜单和菜单项可见/不可见

Javascript 钛合金不加载菜单和菜单项可见/不可见,javascript,titanium,appcelerator,titanium-alloy,Javascript,Titanium,Appcelerator,Titanium Alloy,我对菜单有两个问题。 菜单由.xml文件创建 例如: <Menu> <MenuItem id = "search" onclick = "search" /> <MenuItem id = "add" onclick = "add" /> </ Menu> .js 错误消息:无法设置未定义的可见属性 我为我的英语不好道歉 多谢各位 编辑: 例如: var activity = $ .index.activity;

我对菜单有两个问题。 菜单由.xml文件创建

例如:

<Menu>
<MenuItem id = "search" onclick = "search" />
<MenuItem id = "add" onclick = "add" />
</ Menu>
.js

错误消息:无法设置未定义的可见属性

我为我的英语不好道歉

多谢各位

编辑:

例如:

         var activity = $ .index.activity;
         activity.onPrepareOptionsMenu = function (e) {
             var favoriteGroup e.menu.add = ({
                 title: "Profile",
                 icon: "/global/profile.png"
                 showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
             });
             favoriteGroup.addEventListener ('click', function () {
                Alloy.createController ("favorite_group", args) .getView (). Open ();
             });
         };
         activity.invalidateOptionsMenu ();
问题1的解决方案: 您需要重新加载在Alloy XML中创建的菜单。大多数人在窗口的“打开事件”中的.js文件中创建菜单,以便只有在正确打开窗口后才能创建菜单:

要在.js文件中创建菜单,请执行以下操作:

-仅使用window.js的解决方案

-使用window.xml+window.js的解决方案

$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});
"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}
因此,要解决问题1,您可能需要在该xml的控制器文件中调用此代码(活动仅在打开窗口后可用,因此请使用open event):

window.xml

问题2的解决方案: 这可能是由于两个原因:

  • 你的tss没有像你在问题中写的那样正确
  • 您甚至在打开$.profile菜单项之前就已经在访问它了。(请参见解决方案1中的代码)。因此,在设置属性时,请在窗口打开事件中设置超时
window.js

$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});
"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}
.tss

$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});
"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}

我非常感谢你回答了我的问题。我按你说的做了尝试,但根本不起作用。原因是“onCreateOptions菜单”,删除所有创建为带有.xml的菜单的内容。所以我采用了“onPrepareOptionsMenu”作为解决方案,它似乎目前正在工作。但有一个问题,不知道如何解释原因。它会在菜单上显示两次通过js代码创建的菜单项。在您看来,这个问题的原因是什么?我已经添加并修改了我的代码以匹配您的代码。请查看上面的代码,并尝试了解如何在Android中创建菜单项,以及在某些情况下,如果菜单项没有使用XML显示,则需要如何重新创建菜单项。在XML中创建菜单项时,请勿使用OnPrepareOptions菜单。
$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});
"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}