2014-01-24 4 views
3

Чтобы проверить: ребенок должен проверить родителей на дерево, а очистка родительского флажка должна очистить все его дочерние элементы.Проверьте и снимите узлы в treepanel

Пример:

Parent1
--child1
--child2
          --subChild1
          --subChild2

Scenario1: В описанном выше случае, если subChild1 проверяется, затем Parent1 и child2 также должны быть проверены.

Scenario2: Если Parent1 проверяются, то все его дети (проверено) должны быть сняты.

От этого Check/Uncheck Nodes, только когда выбран родительский узел, его дочерний узел выбирается.

Их что-то implemeted, как я хочу, но не в состоянии понять это (реализация), так как уровень сложности достаточно высок для меня understand.Here это reference

Пожалуйста, помогите мне решить эту функциональность. Спасибо. Любая помощь будет оценена.

+0

Вы даете ссылку на пример extjs 1.0, вы используете Ext4.2, как тег sais? – VDP

+0

Да, я использую ExtJs4.2.I предоставил ссылку для справки. – Dev

ответ

5

Вот что у меня есть done.It потребовалось некоторое время, но он работал.

checkchange : function(node, checked, opts) { 

function clearNodeSelection(node){ 
    //node is not leaf node 
    console.log(node); 
    leafNode = node.raw.leaf; 
    if(!leafNode){ 
     node.cascadeBy(function(node) { 
      node.set('checked', false); 
     }) 
    } 
} 

if(!checked){ 
    console.log("inside !checked : "+checked); 
    clearNodeSelection(node); 
} 

function selectParentNodes(node){ 
    var parentNode = node.parentNode; 
    if(parentNode){ 
     parentNode.set('checked', true); 
     selectParentNodes(parentNode); 
    } 
} 

selectParentNodes(node); 
} 

Atlast, Thanks @VDP. «SO» - это потрясающе.

+0

Рад, что вы могли его найти. Я нашел что-то подобное для сценария 1, но не пришел к сценарию 2 (имел 3-часовую встречу схватки :() – VDP

3

Здесь вы идете! Working fiddle

=> Добавление слушателя для checkchange, проверьте, если он имеет ChildNodes, если так установите значение на ChildNodes

Примечание: Проверьте данные имеют параметр checked: false для включения галочки. (Если не посылается фоновым вы можете заставить его, добавив его к вашей модели и установить его по умолчанию)

var store = Ext.create('Ext.data.TreeStore', { 
    root: { 
     expanded: true, 
     children: [ 
      { text: "detention", leaf: true, checked: false }, 
      { text: "homework", expanded: true, children: [ 
       { text: "book report", leaf: true, checked: false }, 
       { text: "algebra", leaf: true, checked: false} 
      ], checked: false }, 
      { text: "buy lottery tickets", leaf: true, checked: false } 
     ] 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    title: 'Simple Tree', 
    width: 200, 
    height: 150, 
    store: store, 
    rootVisible: false, 
    renderTo: Ext.getBody(), 
    listeners: { 
     checkchange: function(node, checked, eOpts){ 
      if(node.hasChildNodes()){ 
       node.eachChild(function(childNode){ 
        childNode.set('checked', checked); 
       }); 
      } 
     } 
    } 

}); 
+0

Спасибо за ваши усилия @ VDP. Но это не работает так, как я хочу. Он абсолютно противоречит сценарию1 и сценарию2, который я хочу. Согласно вашему решению, при выборе parentNode его дети будут выбраны. – Dev

+0

+1 для прилагаемого усилия. – Dev

+0

жаль, что я немного поскорее :) не прочитал это хорошо .. но не сложно будет реализовать этот сценарий, если вы знаете, что можете сделать это в checkchange.Я сделаю все возможное, чтобы обновить свой ответ через пару минут :) – VDP

 Смежные вопросы

  • Нет связанных вопросов^_^