javascript - Titanium 不加载菜单和 menuItem 可见/不可见

标签 javascript titanium appcelerator titanium-alloy

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

例子:

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

1)第一个问题是有时奇怪的是菜单没有加载,也就是看不到按钮。 你能告诉我为什么吗。

2) 第二个问题是我有一个 menuItem 字段通常不可见,只有字段中的确定条件才必须可见。 你能告诉我如何访问该字段吗?

.xml

<MenuItem id = "profile" />

.tss

"#profile[platform=android]": {
      title: "Profile",
         icon: "/global/profile.png"
         showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
         visible: false
    }

.js

$ .profile.visible = True;

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

我为我糟糕的英语道歉。

谢谢。

编辑:

例子:

         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 的解决方案

    var searchMenu, addMenu;

    $.window.addEventListener('open', function () {
        var activity = $.window.activity;

        activity.onCreateOptionsMenu = function (e) {
            searchMenu = e.menu.add({
                title: 'Search',
                showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS
            });
            searchMenu.addEventListener('click', function () {
                 // open my profile here or do other tasks
            });

            addMenu = e.menu.add({
                title: 'Add',
                showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS
            });
        };

        // this is the code to validate menu items once they are added into an activity
        activity.invalidateOptionsMenu();
    });

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

所以,要解决你的问题没有。 1,您可能需要在该 xml 的 Controller 文件中调用此代码(事件仅在窗口打开后可用,因此请使用打开事件):

window.xml

<Menu platform="android">
    <MenuItem id="MENU_SEARCH" title="Search" onClick='search' showAsAction="Ti.Android.SHOW_AS_ACTION_ALWAYS" />
    <MenuItem id="MENU_ADD"   title="Add" onClick='add' showAsAction="Ti.Android.SHOW_AS_ACTION_ALWAYS" />
</Menu>

window.js

$.window.addEventListener('open', function () {
    $.window.activity.invalidateOptionsMenu();
});

问题2的解决方案:

可能有两个原因:

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

window.js

$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});

.tss

"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}

关于javascript - Titanium 不加载菜单和 menuItem 可见/不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41319369/

相关文章:

android - 钛模拟器打不开

javascript - Angular Material md-select 不显示错误

javascript - React 水合物 TypeError : __webpack_require__. i(...) 不是函数

javascript - 如何根据每个 item.id 的 NUM_PHOTOS 增加 .jpg 前缀的数字?

javascript - memcached.get() 返回结果?

javascript - 获取聊天记录pubnub中的消息时间

javascript - Titanium android 中的内存管理

javascript - iPhone : How to change titlebar text/font colour in Appcelerator Titanium

ios - 如何存储和访问以前在 WebView 中访问过的站点

javascript - 如何在 Titanium PickerRow 中添加自定义属性?