我创建了一个树选择,在下拉列表中显示了dijit.tree。现在我不希望用户选择文件夹,即使它是空的。用户应该只能选择结束节点或叶子。 dijit.tree将所有空文件夹视为叶子。我该如何排序?
答案 0 :(得分:1)
您需要覆盖_onClick或setSelected方法。如果您使用多父模型ForestStoreModel,这会变得复杂。
请参阅fiddle.net
尝试这样做,这只适用于select multiple false:
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}
]}
]
}