2013-09-06 3 views
0

Я хочу найти конкретный узел в дереве ExtJs. Текущий код, который у меня есть, позволяет выполнять поиск узлов только на первом уровне. Пожалуйста, проверьте этот fiddleУпорядочение узла в дереве ExtJs

var store = Ext.create('Ext.data.TreeStore', { 
    root: { 
     expanded: true, 
     children: [{ 
      text: "Javascript", 
      leaf: true 
     }, { 
      text: "ASP.net", 
      leaf: true 
     }, { 
      text: "Also ASP.net", 
      leaf: false, 

      children: [{ 

       text: '1.1 foo', 
       leaf: false, 
       children: [{ 

        text: "1.1.1 asp.net mvc", 
        expanded: true 
       }, { 

        text: "1.1.2 java", 
        expanded: true 
       }, { 

        text: "1.1.3 extjs", 
        expanded: true 
       }] 
      }, { 

       text: '1.2 bar', 
       leaf: true 
      }] 

     }, { 
      text: "ASP.net future", 
      leaf: true 
     }] 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    title: 'Example Tree', 
    width: 200, 
    height: 450, 
    store: store, 
    rootVisible: false, 
    multiSelect: true, 
    renderTo: Ext.getBody(), 
    dockedItems: [{ 
     xtype: 'toolbar', 
     dock: 'bottom', 
     items: [{ 
      text: 'Search for ASP.net', 
      handler: function() { 
       var me = this, 
        panel = me.up('panel'), 
        rn = panel.getRootNode(), 
        regex = new RegExp("ASP.net"); 

       rn.findChildBy(function (child) { 
        var text = child.data.text; 
        if (regex.test(text) === true) { 
         console.warn("selecting child", child); 
         panel.getSelectionModel().select(child, true); 
        } 
       }); 
      } 
     }] 
    }] 
}); 

Что я хочу:

  1. Возможность поиска по всем уровням в дереве
  2. один раз узел найден, я хочу, чтобы развернуть его.

Как я могу это достичь?

Спасибо

ответ

2

Это то, что я искал: http://jsfiddle.net/tdaXs/17/

Спасибо Девендры предложившего Deep вариант поиска.

var store = Ext.create('Ext.data.TreeStore', { 
    root: { 
     expanded: true, 
     children: [{ 
      text: "Javascript", 
      leaf: true 
     }, { 
      text: "ASP.net", 
      leaf: true 
     }, { 
      text: "Also ASP.net", 
      leaf: false, 
      children: [{ 
       text: '1.1 foo', 
       leaf: false, 
       children: [{ 
        text: "1.1.1 ASP.net mvc", 
        leaf: true, 
        expanded: true 
       }, { 
        text: "1.1.2 java", 
        leaf: true, 
        expanded: true 
       }, { 
        text: "1.1.3 extjs", 
        leaf: true, 
        expanded: true 
       }] 
      }, { 

       text: '1.2 bar', 
       leaf: true 
      }] 

     }] 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    title: 'Example Tree', 
    width: 200, 
    height: 450, 
    store: store, 
    rootVisible: false, 
    multiSelect: true, 
    renderTo: Ext.getBody(), 
    dockedItems: [{ 
     xtype: 'toolbar', 
     dock: 'bottom', 
     items: [{ 
      text: 'Search for ASP.net', 
      handler: function() { 
       var me = this, 
        panel = me.up('panel'), 
        rn = panel.getRootNode(), 
        regex = new RegExp("ASP.net"); 

       //var c = rn.findChild("text", " asp.net", true); 

       rn.findChildBy(function (child) { 
        var text = child.data.text; 
        if (regex.test(text) === true) { 
         console.warn("selecting child", child); 
         panel.getSelectionModel().select(child, true); 
        } 
       }); 
      } 
     }] 
    }] 
}); 
+0

Ваша скрипка отличается от кода, который вы разместили выше. Какой код правильный? –

7

Вы можете использовать это:

var c = rn.findChild("text","Also ASP.net",true); 
c.expand(); 

правда указывает на глубокий search.Please взглянуть на findChild.

Пожалуйста, проверьте fiddle

+0

Спасибо за быстрый ответ, но я до сих пор не в состоянии найти узел на уровне 2-3 – SharpCoder

+0

Он будет искать для узла в любой level.It works.Only Дело в том, что не будет expand.For что вам нужно проверить различные условия, такие как; 1.а листовой узел, 2.it имеет родительский или нет. – Dev

+0

Я не уверен, что я следую. если узел является листовым узлом, что нужно сделать, и если узел является родительским узлом, что нужно сделать? Пожалуйста, проверьте эту скрипту: http://jsfiddle.net/tdaXs/14/ Я не могу искать на более низких уровнях. – SharpCoder