Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > ExtJS TreePanel


Автор: Grig 21.9.2009, 05:26
Здравствуйте!
Пытаюсь создать дерево с динамической подгрузкой узлов.
Код

    var auto_tree = new Tree.TreePanel({
        //animate:true,
        autoScroll:true,
        loader: new Tree.TreeLoader({dataUrl:'data/get-auto.jsp'}),
        containerScroll: true,
        border: false,
        baseCls: "tree-road",
        height: 300,
        width: 232,
        rootVisible:false,
        listeners: {
            click: function(n) {
                if (!n.isLeaf()) {
                    Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
                }
            }
        }
    });


файл get-auto.jsp
Код

[{text:'АВМ', id_mach:'384', leaf:true, cls : 'folder' },{text:'АВСЭ', id_mach:'174', leaf:false, cls : 'folder' }]


при раскрытии ветки в нее подгружается то же самое дерево. Как этого можно избежать?


Автор: comtat 21.9.2009, 09:35
Код

<html>
<head>
    <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css"/>
    <script type="text/javascript" src="ext-base.js"></script>
    <script type="text/javascript" src="ext-all.js"></script>
</head>
<body>
<div id="panel"></div>
<script>
Ext.onReady(function(){
    var auto_tree = new Ext.tree.TreePanel({
        el : 'panel',
        autoScroll:true,
        loader: new Ext.tree.TreeLoader({
            dataUrl:'ff.php'
        }),
        containerScroll: true,
        border: false,
        baseCls: "tree-road",
        height: 300,
        width: 232,
        rootVisible:false,
        root: new Ext.tree.AsyncTreeNode({id: 'id_mach'}),
        listeners: {
            click: function(n) {
                if (!n.isLeaf()) {
                    Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
                }
            }
        }
    });
    auto_tree.render();
    auto_tree.getRootNode().expand();
}); 
</script>
</body>
</html>

Файл ff.php возвращает данные оттого какая ветка должна быть раскрыта
Код

<?
if ($_POST['node'] == 'id_mach'){
    echo "[{text:'АВМ', id:'384', id_mach:'384', leaf:true, cls : 'folder' },{text:'АВСЭ', id:'174', id_mach:'174', leaf:false, cls : 'folder' }]";
} else if ($_POST['node'] == '174'){
    echo "[{text:'chield', id:'384', id_mach:'175', leaf:true, cls : 'folder' }]";
}
die();
?>

Автор: Grig 21.9.2009, 10:44
comtat, ага я этот трабл так и решил.
А не знаешь как динамически перегрузить дерево со своими параметрами. Указывание вручную параметров ни к чему не приводит, грузит с дефолтными:
Код

loader.baseParams.current_id_firm="-1";
loader.baseParams.current_id_service = "555";
loader.baseParams.current_id_type_mrt="-1";
//сюда новые параметры не передаются (((
tree.root.reload();

Автор: comtat 21.9.2009, 11:01
Цитата(Grig @  21.9.2009,  10:44 Найти цитируемый пост)
как динамически перегрузить дерево со своими параметрами.

Для каких это целей ?? Открывать сразу нужные ветки ?

Автор: Grig 21.9.2009, 11:05
нет, просто это дерево зависит от параметров, которые выбираются в другом дереве, и от них может полностью изменится.

Автор: Grig 21.9.2009, 11:27
вот что мне кажется поможет:
http://www.cnblogs.com/meetrice/archive/2008/05/28/1209314.html
Правда там все на китайском)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)