Tree: fixed default-expanded-keys can not set again.

pull/1364/head
Furybean 2016-11-25 16:30:10 +08:00 committed by 杨奕
parent 812a953b1e
commit 807c06071d
4 changed files with 56 additions and 23 deletions

View File

@ -97,15 +97,7 @@ export default class Node {
const defaultExpandedKeys = store.defaultExpandedKeys; const defaultExpandedKeys = store.defaultExpandedKeys;
const key = store.key; const key = store.key;
if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) { if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {
if (store.autoExpandParent) { this.expand(null, store.autoExpandParent);
let parent = this.parent;
while (parent.level > 0) {
parent.expanded = true;
parent = parent.parent;
}
}
this.expand();
} }
if (store.lazy) { if (store.lazy) {
@ -213,17 +205,27 @@ export default class Node {
} }
} }
expand(callback) { expand(callback, expandParent) {
const done = () => {
if (expandParent) {
let parent = this.parent;
while (parent.level > 0) {
parent.expanded = true;
parent = parent.parent;
}
}
this.expanded = true;
if (callback) callback();
};
if (this.shouldLoadData()) { if (this.shouldLoadData()) {
this.loadData((data) => { this.loadData((data) => {
if (data instanceof Array) { if (data instanceof Array) {
this.expanded = true; done();
if (callback) callback();
} }
}); });
} else { } else {
this.expanded = true; done();
if (callback) callback();
} }
} }

View File

@ -66,30 +66,30 @@ export default class TreeStore {
} }
} }
getNodeByData(data) { getNode(data) {
const key = typeof data === 'string' ? data : getNodeKey(this.key, data); const key = typeof data !== 'object' ? data : getNodeKey(this.key, data);
return this.nodesMap[key]; return this.nodesMap[key];
} }
insertBefore(data, refData) { insertBefore(data, refData) {
const refNode = this.getNodeByData(refData); const refNode = this.getNode(refData);
refNode.parent.insertBefore({ data }, refNode); refNode.parent.insertBefore({ data }, refNode);
} }
insertAfter(data, refData) { insertAfter(data, refData) {
const refNode = this.getNodeByData(refData); const refNode = this.getNode(refData);
refNode.parent.insertAfter({ data }, refNode); refNode.parent.insertAfter({ data }, refNode);
} }
remove(data) { remove(data) {
const node = this.getNodeByData(data); const node = this.getNode(data);
if (node) { if (node) {
node.parent.removeChild(node); node.parent.removeChild(node);
} }
} }
append(data, parentData) { append(data, parentData) {
const parentNode = parentData ? this.getNodeByData(parentData) : this.root; const parentNode = parentData ? this.getNode(parentData) : this.root;
if (parentNode) { if (parentNode) {
parentNode.insertChild({ data }); parentNode.insertChild({ data });
@ -206,6 +206,7 @@ export default class TreeStore {
} }
setCheckedKeys(keys, leafOnly = true) { setCheckedKeys(keys, leafOnly = true) {
this.defaultCheckedKeys = keys;
const key = this.key; const key = this.key;
const checkedKeys = {}; const checkedKeys = {};
keys.forEach((key) => { keys.forEach((key) => {
@ -214,4 +215,14 @@ export default class TreeStore {
this._setCheckedKeys(key, leafOnly, checkedKeys); this._setCheckedKeys(key, leafOnly, checkedKeys);
} }
setDefaultExpandedKeys(keys) {
keys = keys || [];
this.defaultExpandedKeys = keys;
keys.forEach((key) => {
const node = this.getNode(key);
if (node) node.expand(null, this.autoExpandParent);
});
}
}; };

View File

@ -106,11 +106,16 @@
}, },
watch: { watch: {
defaultCheckedKeys(newVal) {
this.store.defaultCheckedKeys = newVal;
this.store.setDefaultCheckedKey(newVal);
},
defaultExpandedKeys(newVal) {
this.store.defaultExpandedKeys = newVal;
this.store.setDefaultExpandedKeys(newVal);
},
data(newVal) { data(newVal) {
this.store.setData(newVal); this.store.setData(newVal);
},
defaultCheckedKeys(newVal) {
this.store.setDefaultCheckedKey(newVal);
} }
}, },

View File

@ -127,6 +127,21 @@ describe('Tree', () => {
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2); expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
}); });
it('defaultExpandedKeys set', (done) => {
vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
created() {
this.defaultExpandedKeys = [1, 3];
}
});
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
vm.defaultExpandedKeys = [2];
vm.data = JSON.parse(JSON.stringify(vm.data));
setTimeout(() => {
expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
done();
}, 50);
});
it('filter-node-method', (done) => { it('filter-node-method', (done) => {
vm = getTreeVm(':props="defaultProps" :filter-node-method="filterNode"', { vm = getTreeVm(':props="defaultProps" :filter-node-method="filterNode"', {
methods: { methods: {