Titanium not load menu和menuItem可见/不可见

时间:2016-12-25 07:21:56

标签: 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;

错误消息:无法将属性设置为undefined的可见。

我为我糟糕的英语道歉。

谢谢。

编辑:

示例:

         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 个答案:

答案 0 :(得分:3)

问题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的控制器文件中调用此代码(活动仅在打开窗口时可用,因此请使用open事件):

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

可能是由于两个原因:

  • 您的问题写得不正确,就像您在问题中写的一样。
  • 您正在访问$ .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
}