Для отображения возьмем виджет Ext.tree.TreePanel. В него добавим корневой узел (root) типа GeoExt.tree.LayerContainer. Этот класс умеет загружать список слоев из GeoExt.data.LayerStore.
В нашем случае список слоев получается из запроса GetCapabilities. Создаем хранилище и загружаем его:
Код: Выделить всё
store = new GeoExt.data.LayerStore({
url: "http://localhost/wfs?service=WFS&request=GetCapabilities",
reader: new GeoExt.data.WFSCapabilitiesReader()
});
store.load();
Создаем корневой узел дерева:
Код: Выделить всё
layerList = new GeoExt.tree.LayerContainer({
layerStore: store,
expanded: true
});
Код: Выделить всё
layerTree = new Ext.tree.TreePanel({
renderTo: 'tree-div',
root: layerList,
rootVisible: false
});
Код: Выделить всё
store = new GeoExt.data.LayerStore({
...
listeners: {
load: function() {
layerList.reload();
}
}
});
Добавим в LayerContainer загрузчик:
Код: Выделить всё
var myloader = new GeoExt.tree.LayerLoader({
store: store,
filter: function(record) {
if (record.data.name == 'lakes') {
return false;
} else {
return true;
}
},
createNode: function (attr) {
attr.layer.name =
this.store.getById(attr.layer.id).get('abstract')
// стандартная функция создания узла
return GeoExt.tree.LayerLoader.prototype.createNode.call(this, attr);
}
});
layerList = new GeoExt.tree.LayerContainer({
...
loader: myloader
});
- filter - используется для отбраковки ненужных узлов (эти слои не будут показаны в дереве), возвращает true/false;
- createNode - функция создания узла.