Как сделать dataview.list видимым в Sencha Touch 2?
Сенча Touch новичок здесь. Тем не менее, я медленно обдумывал это в последний день или около того. Одна вещь, которая сводила меня с ума, это formpanels и списки, не появляющиеся по некоторой странной причине расположения. Я не могу понять, почему. Например, у меня есть следующий вид поиска:
Ext.define('NC.view.Search', {
extend: 'Ext.dataview.List',
xtype: 'searchpage',
id: 'search-form',
config: {
title: 'Search',
layout: 'vbox',
itemTpl: '<div class="name">{name}</div>',
store: 'Recipes',
items: [
{
xtype: 'toolbar',
docked: 'top',
items: [
{ xtype: 'spacer' },
{
xtype: 'searchfield',
placeHolder: 'Search...'
},
{ xtype: 'spacer' }
]
}
]
}
})
Это находится в панели вкладок:
Ext.define('NC.view.Recipes', {
extend: 'Ext.tab.Panel',
xtype: 'recipetabpanel',
config: {
title: 'Recipes',
tabBarPosition: 'bottom',
activeItem: 0,
items: [
{
title: 'Recipes',
iconCls: 'bookmarks',
items: [
{
xtype: 'searchpage'
}
]
},
{
title: 'Settings',
iconCls: 'settings',
html: 'Settings screen'
}
]
}
})
Это приводит к прекрасной визуализированной панели вкладок с закрепленной панелью поиска вверху, но никаких элементов списка не видно. Если я добавлю к моей панели списка некоторые размеры:
width: '100%',
height: '200px',
Появятся элементы списка из моего хранилища данных. Но я не могу установить высоту до 100%, потому что она исчезнет (ошибка CSS, я думаю).
Так какая иерархия или спецификации макета мне нужны, чтобы список появился и занимал область между панелью поиска и вкладками внизу? Спасибо!
2 ответа
Списки и Dataviews используют макет по умолчанию, поэтому вам не нужно указывать свой собственный vbox
раскладка. Если вы удалите эту конфигурацию из списка, она должна просто работать.
Редактировать:
Хорошо, я внимательно посмотрел на ваше приложение. Вы можете просмотреть его здесь: http://www.senchafiddle.com/ (пресс- запуск).
Проблема заключалась в том, что вы не включали layout: fit
в элементе рецептов на панели вкладок (Recipes.js, строка 15).
Ему нужен подходящий макет, чтобы он знал размер нового добавляемого элемента.
Но основная проблема с элементом, который вы добавляете, является чрезмерной. Давайте посмотрим на ваш код:
{
title: 'Recipes',
iconCls: 'bookmarks',
layout: 'fit',
items: [
{
xtype: 'searchpage'
}
]
}
То, что происходит здесь, это создание нового Ext.Container (с title
, iconCls
и т.д.), а затем в этом контейнере добавление searchpage
компонент, который вы создаете. Теперь внешний контейнер здесь (с title
) автоматически растянется до размера своего контейнера (панели вкладок), поскольку панель вкладок имеет layout: 'card'
конфигурация по умолчанию. Проблема в том, что вы добавляете в него еще один компонент (ваш searchpage
) и потому что контейнер, который вы добавили (тот, с title
) не имеет макета (только его контейнер, панель вкладок), а затем список (searchpage
) не знает растянуть до размера предмета.
Это называется чрезмерным, потому что вы можете просто вставить searchpage
компонент в качестве дочернего элемента табульной панели и дать ему title
а также iconCls
, Что вы должны делать это:
{
title: 'Recipes',
iconCls: 'bookmarks',
xtype: 'searchpage'
}
Как видите, я просто перемещаю xtype в блок конфигурации, и мы можем удалить всю конфигурацию элементов, потому что добавляемый элемент является фактическим searchpage
,
А вот ссылка на код, но исправленная: http://www.senchafiddle.com/
Надеюсь, это имеет смысл. Макеты могут быть трудны для восприятия с Sencha Touch. Я бы также посоветовал вам прочитать руководство по макету (если вы этого еще не сделали) в документации Sencha Touch 2, так как оно может быть очень полезным.
Компонент Ext List не нуждается в макете. Кроме того, компонент списка не является контейнером - это просто представление данных, которое не может иметь собственных дочерних элементов. Таким образом, вы не можете добавлять предметы туда.
Так,
- Удалить макет
- Удалить предметы
- Добавьте панель инструментов на панель, где вы добавляете этот список.
- Добавить макет: "подгонка" к панели выше
Список:
Ext.define('NC.view.Search', {
extend: 'Ext.dataview.List',
xtype: 'searchpage',
id: 'search-form',
config: {
title: 'Search',
layout: 'vbox',
itemTpl: '<div class="name">{name}</div>',
store: 'Recipes'
}
});
TabPanel:
Ext.define('NC.view.Recipes', {
extend: 'Ext.tab.Panel',
xtype: 'recipetabpanel',
config: {
title: 'Recipes',
tabBarPosition: 'bottom',
activeItem: 0,
items: [{
title: 'Recipes',
iconCls: 'bookmarks',
layout : 'fit',
items: [{
xtype: 'toolbar',
docked: 'top',
items: [{ xtype: 'spacer' }, {
xtype: 'searchfield',
placeHolder: 'Search...'
},
{ xtype: 'spacer' }
]
},
{
xtype: 'searchpage'
}
]
},
{
title: 'Settings',
iconCls: 'settings',
html: 'Settings screen'
}
]
}
})