Компонент Menu или выпадающее меню, наследуется от list и позволяет пользователю выбирать нужный элемент из списка сгруппированных элементов (подменю). Каждый элемент подменю может содержать в себе свое подменю.
Динамическое Submenu или подменю, отображается при наведении курсора на соответствующий элемент главного меню (вызов события onMouseOver) и скрывается, если убрать курсор (onMouseOut).
Объект Menu хранится в свойстве data.
webix.ui({
view:"menu",
id:"my_menu",
subMenuPos:"right",
layout:"y",
data:[ // данные меню
{ value:"Translate...", submenu:["English", "Slavic...", "German"]},
{ $template:"Separator" },
{ value:"Post...", submenu:[ "Facebook", "Google+", "Twitter" ]}
],
type:{
subsign:true,
height:50
}
});
"click"
, сворачивание и разворачивание элементов подменю будет производиться по клику;false
.Related sample: Showing Menu on Mouse Click (dropping down on hover is disabled)
Элемент меню (подменю) может быть текстовым элементом и содержать в себе еще одно подменю или любой компонент Webix, заданный по его ID.
Элементы Menu хранятся в массиве data отдельными объектами. Элементы Submenu хранятся в массиве submenu или data. Каждый элемент меню может содержать следующие атрибуты:
Самый простой способ задать элементы меню - это передать их как массив:
{ view:"menu", data:["Google", "Facebook", "Twitter"] }
Или массив объектов:
{ view:"menu", data:[
{ id:1, value:"Google"},
{ id:2, value:"Facebook"},
{ id:3, value:"Twitter"}
]}
В любой элемент меню или подменю можно добавить ссылку с помощью параметров href и target (необязательный параметр):
view:"menu",
data:[
{ id:"1", value:"Imitation of Spenser", href: "#verse1", target:"_blank"},
{ id:"2", value:"The Human Seasons", href: "#verse2"}
]
Если значение target не задано, он будет установлено как пустая строка.
Значки отображают числовую информацию относящуюся к элементу меню, например количество сообщений:
view:"menu",
data:[
{ id:"1",value:"Translations", badge:"1"},
{ id:"2",value:"Posts", badge:"12" },
{ id:"3",value:"Info", badge:"24" }
]
Related sample: Menu with Badges
Чтобы отделить одну группу элементов от другой в вертикальном меню, используется свойство $template. Возможные значения:
Промежуток между элементами меню
view:"menu",
layout:"y",
data:[
{ id:"1", value:"Translations", icon:"qrcode", badge:20 },
{ id:"2", value:"Posts", icon:"file-word-o", badge:3 },
{ $template:"Spacer" },
{ id:"3", value:"Help", icon:"support"},
]
Линия между элементами меню
view:"menu",
layout:"y",
data:[
{ value:"Translate..." },
{ value:"Post...", submenu:[ "Facebook", "Google+", "Twitter" ]},
{ $template:"Separator" },
{ value:"Info" }
]
Элементы подменю могут быть заданы массивом значений:
{ id:"2",value:"Translate...", submenu:[ "English", "Slavic", "German" ]},
Или массивом объектов:
{ id: "1.2", value:"Slavic...", submenu:[
{id: "1.2.1", value:"Belarusian"},
{id: "1.2.2", value:"Russian"},
{id: "1.2.3", value:"Ukrainian"}
]}
Любое вложенное подменю (попап) можно настройить отдельно, с помощью параметра config его родителя:
view:"menu",
submenuConfig:{
width:400
},
data:[
{ id:"2",value:"Custom...",
config:{
width:500,
on:{
onItemClick:function(id){
webix.message("Submenu click: "+id);
}
}
},
submenu:[ "Facebook", "Google+", "Twitter" ]
}
]
Эта настройка переопределяет общие настройки для подменю, заданные в submenuConfig.
Related sample: Menu: Configuring Submenus
Чтобы автоматически изменять ширину Submenu в соответствии с высотой содержимого, используется свойство autowidth со значением true
в конфигурации Menu:
webix.ui({
container:"areaA",
view:"menu",
autowidth:true,
data:[
{ id:"1",value:"Short...",
submenu:[ "FB", "G+", "TW" ]},
{ id:"2",value:"Medium...",
submenu:[ "Facebook", "Google+", "Twitter" ]},
...
]
});
Related sample: Autowidth for Submenus
Параметр submenu может также указывать на предварительно инициализированные popup, submenu, context или window:
webix.ui({
id:"details1",
view:"context", width:300, height:200,
body:{ content:"html1" }
});
webix.ui({
view:"menu",
data:[
{ value:"HTML 4", submenu:"details1" },
{ value:"HTML 5", submenu:"details2" }
]
});
Related sample: HTML Elements as Menu Items
Таким же образом вы можете инициализировать компонент Webix Submenu отдельно и затем сослаться на него внутри свойства submenu в конфигурации Menu:
webix.ui({
view:"submenu", id:"test", data:[
{ id:"1.1", value:"English"},
{ id:"1.3", value:"German"}
]
});
webix.ui({
view:"menu",
data:[
{ id:"1", value:"Translate...", submenu:"test"},
{ id:"2", value:"Post..."}
]
});
Каждый элемент подменю может содержать свой компонент Submenu.
MenuBar похож на обучный тулбар, самый быстрый способ создать панель Menu - это инициализировать меню и тулбар в соседних колонках:
webix.ui({
cols:[ menu, toolbar ]
});
Related sample: Menu in Toolbar
Чтобы скрыть или показать элемент меню, вы можете воспользоваться методами hideMenuItem() и showMenuItem() соответственно, указав ID нужных элементов в качестве параметров.
Событием провоцирующим выполнение функции может быть изменение состояния чекбокса в компоненте Webix Tree, заполненном теми же данными что и меню, при условии что ID элемента равен ID соответствующего элемента меню.
$$("tree1").attachEvent("onItemCheck",function(id,state){
if (state) // если флажок отмечен
$$("top_menu").hideMenuItem(id);
else
$$("top_menu").showMenuItem(id);
});
В результате только "неотмеченные" элементы меню будут отображены.
Related sample: Hiding Menu Items
Чтобы заблокировать или разблокировать элемент меню, вы можете воспользоваться методами disableItem() и enableItem() соответственно, указав ID нужных элементов в качестве параметров. Событием провоцирующим выполнение функции может быть изменение состояния чекбокса, ID которого равно ID соответствующего элемента меню.
$$("tree1").attachEvent("onItemCheck",function(id,state){
if(state) // если флажок отмечен
$$("top_menu").disableItem(id);
else
$$("top_menu").enableItem(id);
});
Вы можете заблокировать определенный элемент меню прямо в конфигурации, указав disabled:true
в нужном объекте.
webix.ui({
view:"menu",
data:[
{ id:"1",value:"Translate...", submenu:[
{id: "1.1", value:"English"},
{ id: "1.2", value:"Slavic...", submenu:[
{id: "1.2.1", value:"Belarusian"},
{id: "1.2.2", value:"Russian", disabled:true },
{id: "1.2.3", value:"Ukrainian"}
]}
]}
]
});
Блокировка и разблокировка элементов реализуется с помощью классов CSS, поэтому элементы меню содержат темплейт для отображения активного и заблокированного состояния:
view:"menu",
template:function(obj){
if(obj.disabled)
return "<span class='disabled'>"+obj.value+"</span>";
return obj.value;
}
Related sample: Disabling Menu Items
Доступ ко всем элементам меню и подменю можно получить по их ID.
1 . Доступ к любому элементу можно получить с помощью метода getMenuItem(), который принимает ID элемента в качестве параметра и возвращает объект элемента:
// получает значение элемента меню по его ID
$$('menu1').getMenuItem(id).value;
2 . В то же время элементы меню могут быть получены через объект подменю, возвращаемого методом getSubMenu() для элемента с указанным ID. Если для элемента не существует подменю - будет возвращен объект вызываемого компонента.
var menu = $$("menu1").getSubMenu(id);
var item = menu.getItem(id).value;
Related sample: HTML Elements as Menu Items
Оба метода могут быть использованы в любом из внутренних событий меню, например в событиях по клику:
Обработчик "onMenuItemClick"
view:"menu",
data:[...],
on:{
onMenuItemClick:function(id){
webix.message("Click: "+this.getMenuItem(id).value);
}
}
Обработчик Submenu "onItemClick"
view:"menu",
data:[
{ id:"1",value:"Custom...",
config:{
width:250,
on: { onItemClick:function(id){
webix.message("Submenu click: "+id);
}}
},
submenu:{...}
}
]
Related sample: Configuring Submenus