Фильтрация дерева
Здравствуйте. Делаю фильтрацию дерева на ExtJs 3.4, но не получается что-то. Из примеров нашел только для ExtJs.Net
http://examples.ext.net/#/TreePanel/Advanced/Filter/
var triggerField = new Ext.form.TriggerField({
fieldLabel: 'Поиск',
triggerClass: 'x-form-search-trigger',
enableKeyEvents: true
});
// toolbar дерева, оно большое, поэтому только часть
tbar: {
items: [
{
xtype: 'tbtext',
text: 'Поиск'
},
{
xtype: 'tbspacer'
},
triggerField
]
}
triggerField.on('keyUp',
function(element, event) {
var text = element.getRawValue();
if (Ext.isEmpty(text, false)) {
return;
}
if (event.getKey() === Ext.EventObject.ESC) {
element.onTriggerClick();
} else {
var regExp = new RegExp(".*" + text + ".*", "i");
var treeFilter = new Ext.tree.TreeFilter(tree);
// Если название отдела
if (isNaN(parseInt(text))) {
treeFilter.filterBy(function (node) {
return regExp.test(node.text);
});
} else {
treeFilter.filterBy(function (node) {
return regExp.test(node.id);
});
}
}
},
triggerField,
{ buffer: 100 }
);
triggerField.onTriggerClick = function(event) {
this.setValue("");
//tree.collapseAll();
tree.getRootNode().expand();
tree.expandAll();
// tree.getRootNode().ensureVisible();
};
фильтрацию делаю по тексту узлов, так и по id. Подскажите, пожалуйста :) |
а в чем проблема?
|
Проблема в том, что хочется сделать как из примера по ссылке для Net-а, а не получается.
1. Ввожу символ, проверяет только корень. Я думаю, ну ладно, поставлю вместо filterBy -> filter treeFilter.filter(regExp, 'text'); не помогло, все равно проверяет только корень. 2. При очистке триггера для ExtJs.Net-а есть tree.getRootNode().collapseChildNodes(true); tree.getRootNode().ensureVisible(); какая есть аналогия ? Для tree.getRootNode().collapseChildNodes(true); вроде как подходит tree.collapseAll(); а для tree.getRootNode().ensureVisible(); что ? Хочу сделать тоже самое поведение в конечном итоге |
1. Ноды сразу все загружаются или по экспанду родительской?
Цитата:
http://docs.sencha.com/ext-js/3-4/#!...-ensureVisible Цитата:
|
Цитата:
var rootNode = new Ext.tree.AsyncTreeNode({
text: 'Отделы',
draggable: false,
children: result.departments
});
tree.setRootNode(rootNode);
Цитата:
Цитата:
|
юзайте свежую доку по ExtJS 3.4 http://docs.sencha.com/ext-js/3-4/
|
Цитата:
tree.getLoader().load(node); |
Я ж говорю, в Mozilla Firefox 9.0.1 у меня все время так
ссылка на изображение, размер: 13.3 кбайт, 1024 x 706 точек |
Цитата:
У TriggerField есть autoWidth, почему оно может не работать в true ? |
var treeFilter = new Ext.tree.TreeFilter(tree);
triggerField.on('keyUp',
function(element, event) {
var text = element.getRawValue();
treeFilter.clear();
if (event.getKey() === Ext.EventObject.ESC || Ext.isEmpty(text, false)) {
element.onTriggerClick();
} else {
var regExp = new RegExp(".*" + text + ".*", "i");
// Если название отдела
if (isNaN(parseInt(text))) {
/* treeFilter.filterBy(function (node) {
return regExp.test(node.text);
});
*/
treeFilter.filter(regExp, 'text');
} else {
treeFilter.filterBy(function (node) {
return regExp.test(node.id);
});
}
}
},
triggerField,
{ buffer: 100 }
);
triggerField.onTriggerClick = function(event) {
treeFilter.clear();
this.setValue("");
tree.getRootNode().collapseChildNodes(true);
tree.getRootNode().ensureVisible();
};
На tree.getRootNode().ensureVisible(); выскакивает ошибка Ext.fly(child, "_scrollChildIntoView") is null [Прерывать на этой ошибке] Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll); , что же не так делаю ? Да и фильтрация осуществляется только по root-у :( |
| Часовой пояс GMT +3, время: 02:29. |