【发布时间】:2013-12-31 10:57:01
【问题描述】:
我有一个带菜单的简单按钮。菜单中有一个树形面板。
每当用户选择树中的某个节点时,我都会更新容器按钮文本。
在 treepanel 的 afterrender 事件中,我在树中进行了默认节点选择,并且此触发选择事件和按钮的文本被更新。
但是,当第一次渲染按钮时,菜单内的树形面板还没有渲染。
如何在按钮被渲染后让菜单和树形面板静默渲染(添加到 dom 但在单击按钮之前不向用户显示)?
实际上有一个我犹豫使用的解决方法:
btn.showMenu();
btn.hideMenu();
有更好的想法吗?
JsFiddle: http://jsfiddle.net/exGk3/
代码:
var selectedNodeIndex = 1;
var onItemSelect = function (selModel, node, index) {
var treePanel = selModel.view.up();
var btn = treePanel.up("button");
btn.setText(node.data.text);
};
var afterTreeRender = function (t) {
t.selModel.select(selectedNodeIndex);
}
Ext.create('Ext.Button', {
text: 'Click me',
renderTo: Ext.getBody(),
menu: {
items: {
xtype: "treepanel",
id: "tree",
indent: false,
width: 150,
height: 200,
rootVisible: false,
root: {
children: [{
text: "item 1",
leaf: true
}, {
text: "item 2",
leaf: true
}, {
text: "item 3",
leaf: true
}]
},
listeners: {
select: {
fn: onItemSelect
},
afterrender: {
fn: afterTreeRender
}
}
},
showSeparator: false
}
});
【问题讨论】: