我有一个Extjs treepanel,我添加了许多图层。另外,我有一个包含搜索按钮的搜索面板。单击搜索按钮时,它将在extjs gridview中返回结果。
我想通过点击gridviews行来显示图层,并动态或以编程方式将treepanel的复选框设置为true 我添加了像
这样的树状面板var layerTree = new Ext.tree.TreePanel({
border: true,
root: layerList,
split: true,
containerScroll: true,
collapseMode: "mini",
autoScroll: true,
loader: new Ext.tree.TreeLoader({
applyLoader: false,
uiProviders: {
"layernodeui": LayerNodeUI
}
}),
root: {
nodeType: "async",
children: Ext.decode(treeConfig)
},
listeners: {
"radiochange": function(node) {}
},
rootVisible: false,
lines: false
});
我想要layernode.checked=true
谢谢Akatum你说
在网格配置中,您需要为itemclick事件设置侦听器,当用户单击网格中的行时会触发该事件。在此侦听器中,您需要从行记录中获取有关图层的信息。然后你可以通过Ext.data.TreeStore getNodeById方法在树中找到图层节点,并将其checked属性设置为true
因此,在您的网格配置中,您将拥有:
listeners: {
itemclick: function(c, record) {
// get layer id from clicked row record
var layerId = record.get('layerId');
// find layer node in tree by layer id
var node = layerTree.getStore().getNodeById(layerId);
// set node checked attribute to true
node.set('checked', true);
}
}
我尝试了你的代码,但它没有用。我在我的代码中添加了您建议的代码,如此
var grid = new Ext.grid.GridPanel({
store: new Ext.data.JsonStore({
fields: action.result.fields,
listeners: {
load: function() {
setTimeout(function() {
grid.getSelectionModel().selectFirstRow();
}, 100);
}
}
}),
frame: true,
columns: action.result.columns,
stripeRows: true,
listeners: {
itemclick: function(c, record) {
var layerId = record.get('layerId');
var node = layerTree.getStore().getNodeById(layerId);
node.set('checked', true);
}
}
});
答案 0 :(得分:0)
在网格配置中,您需要为itemclick
事件设置侦听器,当用户单击网格中的行时会触发该事件。在此侦听器中,您需要从行记录中获取有关图层的信息。然后,您可以通过Ext.data.TreeStore
getNodeById
方法在树中找到图层节点,并将其选中的属性设置为true
因此,在您的网格配置中,您将拥有:
listeners: {
itemclick: function(c, record) {
// get layer id from clicked row record
var layerId = record.get('layerId');
// find layer node in tree by layer id
var node = layerTree.getStore().getNodeById(layerId);
// set node checked attribute to true
node.set('checked', true);
}
}