Titanium 未加载菜单和 menuItem visible/not 可见
Titanium not load menu and menuItem visible/not visible
菜单有两个问题。
菜单由 .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 中创建的菜单。大多数人在 window 的打开事件中在 .js 文件中创建菜单,以便只有在 window 正确打开后才能创建它们:
要在 .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 的控制器文件中调用此代码(activity 仅在 window 打开后可用,因此请使用打开事件):
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 打开事件中设置超时
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
}
菜单有两个问题。 菜单由 .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 中创建的菜单。大多数人在 window 的打开事件中在 .js 文件中创建菜单,以便只有在 window 正确打开后才能创建它们:
要在 .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 的控制器文件中调用此代码(activity 仅在 window 打开后可用,因此请使用打开事件):
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 打开事件中设置超时
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
}