我正在尝试在第一个标签上创建一个包含tabpanel
控制器的splitview
视图。将“厨房水槽”演示放在一个tabpanel的一个标签中。
其他人不包含嵌套列表。
http://dev.sencha.com/deploy/touch/examples/production/kitchensink/
我已经尝试将嵌套列表放入容器中,您可以在下面显示的一些注释代码中看到。
目前,此工作代码仅显示占据第一个选项卡上整个部分的嵌套列表:
Ext.application({
name: 'Test',
requires: [
'Ext.dataview.NestedList',
'Ext.navigation.Bar'
],
launch: function() {
Ext.create("Ext.TabPanel", {
fullscreen: true,
tabBarPosition: 'bottom',
items: [{
id: 'tab4',
title: 'Tab4',
iconCls: 'star',
xtype: 'container',
items: [{
xtype: 'nestedlist',
displayField: 'text',
docked: 'left',
store: store
}, {
html: 'Detail View'
}]
}, {
id: 'tab2',
title: 'Tab2',
iconCls: 'star',
html: 'No nav bar?'
}, {
id: 'tab3',
title: 'Tab3',
iconCls: 'star',
html: 'Screen3'
}]
}).setActiveItem(0);
}
});
商店设置:
Ext.Loader.setConfig({ enabled: true });
var data = {
text: 'Groceries',
items: [{
text: 'Drinks',
items: [{
text: 'Water',
items: [{
text: 'Sparkling',
leaf: true
},{
text: 'Still',
leaf: true
}]
},{
text: 'Coffee',
leaf: true
},{
text: 'Espresso',
leaf: true
},{
text: 'Redbull',
leaf: true
},{
text: 'Coke',
leaf: true
},{
text: 'Diet Coke',
leaf: true
}]
},{
text: 'Fruit',
items: [{
text: 'Bananas',
leaf: true
},{
text: 'Lemon',
leaf: true
}]
},{
text: 'Snacks',
items: [{
text: 'Nuts',
leaf: true
},{
text: 'Pretzels',
leaf: true
}, {
text: 'Wasabi Peas',
leaf: true
}]
}
]};
Ext.define('ListItem', {
extend: 'Ext.data.Model',
config: {
fields: [{
name: 'text',
type: 'string'
}]
}
});
var store = Ext.create('Ext.data.TreeStore', {
model: 'ListItem',
defaultRootProperty: 'items',
root: data
});
答案 0 :(得分:4)
好。我已经为您创建了这个示例:http://www.senchafiddle.com/#ynn40
你也可以从这里下载整个资源:http://rwd.me/FG5s(非常大,因为它包含了SDK)
请务必查看所有文件,因为我已添加了大量文档。
一些注意事项:
我创建了一个名为Sencha.view.SplitView
的新组件。这显然可以称为任何东西。它的xtype为splitview
,因此我们只需要它并将其包含在我们的Main.js
文件中(Ext.tab.Panel
。
{
xtype: 'splitview',
title: 'SplitView',
store: 'Items'
}
因为这是tabPanel中的一个项目,所以我们也需要为它提供title
配置。当然,我们可以在任何地方包含这个Splitview组件。
正如您所看到的,它具有在SplitView中定义的store
配置:
config: {
/**
* We create a custom config called store here so we can pass the store from this component
* (SplitView) down into the nested list when it updates. Checkout {@link #updateStore}
* @type {Ext.data.Store}
*/
store: null
}
这用于将存储从splitview传递到嵌套列表(我们将在一秒钟内完成)。当然,除非我们添加适当的方法来更新嵌套列表,否则该配置将无效:
/**
* This is called when the {@link #store} config has been updated.
* We simply check if the nested list has been created, and if it has, set the store
* on it with the new value.
*/
updateStore: function(newStore) {
if (this.nestedList) {
this.nestedList.setStore(newStore);
}
}
如您所见,我们只是使用SplitView商店的新值更新nestedList
(如果存在)商店。
在SplitView的initialize
方法中,我们创建了detailContainer
(嵌套列表的详细信息卡应该去的地方)和nestedList
,然后将它们添加到SplitView。请务必查看我们提供的一些nestedList
配置,因为它们非常重要。商店配置:
// Set the store of this nested list to the store config of this component (Splitview)
store: this.getStore()
detailCard
和detailContainer
配置:
// Tell the nested list to have a detail card and put it inside our new detailContinaer
detailCard: true,
detailContainer: this.detailContainer
当然是听众所以我们知道什么时候会发生变化:
// And finally add a listener so we know when to update the detail card
listeners: {
scope: this,
leafitemtap: this.onLeafItemTap
}
最后,我们将onLeadItemTap
方法添加到Splitview(我们添加了上面的监听器)中,该方法应该使用新信息更新详细信息卡:
/**
* This is called when a leaf item is tapped in the nested list, or when the detail card
* should be updated. In here, we just get the record which was tapped and then set the HTML
* of the detail card.
*/
onLeafItemTap: function(nestedList, list, index, node, record, e) {
var detailCard = nestedList.getDetailCard();
detailCard.setHtml(record.get('text'));
}
希望这有意义并帮助您。如果没有,请告诉我。