2015-11-05 3 views
0

Я сделал додзе дерево с флажком.Dojo Tree with checkbox

, но когда я проверил родительский узел, дочерний узел не был выбран автоматически. (Не расширено ребенок)

Только когда я раскрывайте дерево один раз, после этого, дочерний узел может быть выбран, когда я нажимаю родительский флажок.

Вот код.

require([ 
"dojo/_base/window", "dojo/store/Memory", 
"dijit/tree/ObjectStoreModel", 
"dijit/Tree", "dijit/form/CheckBox","dojo/dom", 
"dojo/domReady!" 
], function(win, Memory, ObjectStoreModel, Tree, checkBox, dom){ 

// Create test store, adding the getChildren() method required by ObjectStoreModel 
var myStore = new Memory({ 
    data: [ 
     { id: 'world', name:'The earth', type:'planet', population: '6 billion'}, 
     { id: 'AF', name:'Africa', type:'continent', population:'900 million', area: '30,221,532 sq km', 
       timezone: '-1 UTC to +4 UTC', parent: 'world'}, 
      { id: 'EG', name:'Egypt', type:'country', parent: 'AF' }, 
      { id: 'KE', name:'Kenya', type:'country', parent: 'AF' }, 
       { id: 'Nairobi', name:'Nairobi', type:'city', parent: 'KE' }, 
       { id: 'Mombasa', name:'Mombasa', type:'city', parent: 'KE' }, 
      { id: 'SD', name:'Sudan', type:'country', parent: 'AF' }, 
       { id: 'Khartoum', name:'Khartoum', type:'city', parent: 'SD' }, 
     { id: 'AS', name:'Asia', type:'continent', parent: 'world' }, 
      { id: 'CN', name:'China', type:'country', parent: 'AS' }, 
      { id: 'IN', name:'India', type:'country', parent: 'AS' }, 
      { id: 'RU', name:'Russia', type:'country', parent: 'AS' }, 
      { id: 'MN', name:'Mongolia', type:'country', parent: 'AS' }, 
     { id: 'OC', name:'Oceania', type:'continent', population:'21 million', parent: 'world'}, 
     { id: 'EU', name:'Europe', type:'continent', parent: 'world' }, 
      { id: 'DE', name:'Germany', type:'country', parent: 'EU' }, 
      { id: 'FR', name:'France', type:'country', parent: 'EU' }, 
      { id: 'ES', name:'Spain', type:'country', parent: 'EU' }, 
      { id: 'IT', name:'Italy', type:'country', parent: 'EU' }, 
     { id: 'NA', name:'North America', type:'continent', parent: 'world' }, 
     { id: 'SA', name:'South America', type:'continent', parent: 'world' } 
    ], 
    getChildren: function(object){ 
     return this.query({parent: object.id}); 
    } 
}); 

// Create the model 
var myModel = new ObjectStoreModel({ 
    store: myStore, 
    query: {id: 'world'} 
}); 

// Create the Tree. 
var tree = new Tree({ 
    model: myModel, 
    getIconClass:function(item, opened){ 
      console.log('tree getIconClass', item, opened); 
      console.log('tree item type', item.type); 
     }, 

    onClick: function(item, node) { 
      node._iconClass= "dijitFolderClosed"; 
      node.iconNode.className = "dijitFolderClosed"; 
      console.log(node.domNode.id); 
      var id = node.domNode.id, isNodeSelected = node.checkBox.get('checked'); 
      console.log(isNodeSelected); 

       dojo.query('#'+id+' .dijitCheckBox').forEach(function(node){ 
        dijit.getEnclosingWidget(node).set('checked',isNodeSelected); 
       }); 


     }, 
    _createTreeNode: function(args) { 
     var tnode = new dijit._TreeNode(args); 
     tnode.labelNode.innerHTML = args.label; 
     console.log('Tree created', args); 
     var cb = new dijit.form.CheckBox({id: args.item.id}); 
     cb.placeAt(tnode.labelNode, "first"); 
     tnode.checkBox = cb; 


     return tnode; 
    } 
}); 
tree.placeAt(contentHere); 
tree.startup(); 
//tree.expandAll(); 


}); 

http://jsfiddle.net/pyz9Lcpv/9/

ответ

0

Это происходит потому, что до того, как узел был открыт в дереве, это содержимое еще не существует. Они загружаются после того, как узел открывается в дереве. Что вы можете сделать, это подключить к событию onOpen дерева, а затем решить, следует ли проверять флажки всех узлов, которые только что были созданы.