2012-05-17 2 views
0

Я создал выбор дерева, который показывает dijit.tree в выпадающем списке. Теперь я не хочу, чтобы пользователь выбирал папку, даже если она пуста. Пользователь должен выбирать только конечные узлы или листья. dijit.tree обрабатывает все пустые папки как листья. как мне это отсортировать?dijit.tree с пустыми папками

ответ

1

Вам необходимо переопределить методы _onClick или setSelected. Это осложняется, если вы используете многопартийную модель ForestStoreModel.

См fiddle.net

Попробуйте сделать, как, например, это будет работать только для выбора множественным ложным:

getIconClass: function fileIconClass(item, nodeExpanded) { 
     var store = item._S, 
      get = function() { 
       return store.getValue(item, arguments[0]); 
      }; 
     // scope: dijit.Tree 
     if (item.root || get("isDir")) { 

      if (!item || this.model.mayHaveChildren(item) || get("isDir")) { 
       return (nodeExpanded ? "dijitFolderOpened" : "dijitFolderClosed"); 
      } else { 
       return "dijitLeaf"; 
      } 

     } else { 

      return "dijitLeaf"; 

     } 
    }, 
    onClick: function(item, treeNode, e) { 

     var store = item._S, 
      get = function() { 
       return store.getValue(item, arguments[0]); 
      }; 
     if (get("isDir")) this.set("selectedItems", []); 
    } 

Адаптировать как вы считаете нужным, соответствие ваших данных JSON - в частности isDir, то выше работает на выборке json вот так:

{ 
    identifier: 'id', 
    label: 'foo', 
    items: [ 
     { 
     id: 'item1', 
     foo: 'file1', 
     isDir: false}, 
    { 
     id: 'item2', 
     foo: 'emptyDir', 
     isDir: true}, 
    { 
     id: 'item3', 
     foo: 'dir', 
     isDir: true, 
     children: [ 
      { 
      id: 'item3_1', 
      foo: 'fileInDir', 
      isDir: false} 
     ]} 
    ] 
} 
+0

еще одна вещь, которая меня беспокоит, заключается в том, что некоторые из моих папок могут быть пустыми. поэтому я не хочу, чтобы они были выбраны. Я думаю, что мой магазин должен быть настроен таким образом. у вас есть какие-то трюки? – MozenRath

+0

только в коробке; я думаю, вам может потребоваться установить значение в папке, например '{path: '/ var/lib/modules /', isDir: true, isEmpty: true}', и в этом случае вы можете напрямую проверить 'if (! (isDir)) this.set ("selectedItems ..."); ' чтобы избежать выбора папок - и если ваша папка пуста, она также получит значок листа (из таблицы стилей). Затем в дереве вы можете переопределить функцию getIconClass и вернуть класс, соответствующий любой папке или листу (добавлен образец из моего собственного расширения dijit.Tree). – mschr

+0

setselecteditems - неправильное место. Я не хочу, чтобы там был какой-либо выбор в папке – MozenRath

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