我创建了一个在下拉列表中显示 dijit.tree 的树选择。现在我不希望用户选择一个文件夹,即使它是空的。用户应该只能选择末端节点或叶子。dijit.tree 将所有空文件夹视为叶子。我该如何排序?
			
			1228 次
		
1 回答
            1        
        
		
您需要覆盖 _onClick 或 setSelected 方法。如果您使用多父模型 ForestStoreModel,这会变得复杂。
尝试这样做,这仅适用于选择多个 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}
        ]}
    ]
}
于 2012-05-18T10:12:43.610   回答