From 5c386d5ce8b50fd536e565c3f131388ef1e54dcf Mon Sep 17 00:00:00 2001 From: FuryBean Date: Thu, 24 Nov 2016 06:54:32 +0800 Subject: [PATCH] Table: fix dynamic prop in table-column cause script error. (#1314) --- packages/table/src/table-column.js | 6 +- packages/table/src/table-layout.js | 2 + test/unit/specs/table.spec.js | 192 +++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+), 3 deletions(-) diff --git a/packages/table/src/table-column.js b/packages/table/src/table-column.js index 776532432..f54033c33 100644 --- a/packages/table/src/table-column.js +++ b/packages/table/src/table-column.js @@ -306,21 +306,21 @@ export default { width(newVal) { if (this.columnConfig) { this.columnConfig.width = newVal; - this.owner.scheduleLayout(); + this.owner.store.scheduleLayout(); } }, minWidth(newVal) { if (this.columnConfig) { this.columnConfig.minWidth = newVal; - this.owner.scheduleLayout(); + this.owner.store.scheduleLayout(); } }, fixed(newVal) { if (this.columnConfig) { this.columnConfig.fixed = newVal; - this.owner.scheduleLayout(); + this.owner.store.scheduleLayout(); } } }, diff --git a/packages/table/src/table-layout.js b/packages/table/src/table-layout.js index 640bd24eb..de917133c 100644 --- a/packages/table/src/table-layout.js +++ b/packages/table/src/table-layout.js @@ -149,6 +149,8 @@ class TableLayout { flattenColumns.forEach((column) => { if (!column.width && !column.minWidth) { column.realWidth = 80; + } else { + column.realWidth = column.width || column.minWidth; } bodyMinWidth += column.realWidth; diff --git a/test/unit/specs/table.spec.js b/test/unit/specs/table.spec.js index c00394af2..3f74a92a2 100644 --- a/test/unit/specs/table.spec.js +++ b/test/unit/specs/table.spec.js @@ -1091,6 +1091,198 @@ describe('Table', () => { }); }); + describe('dynamic column attribtes', () => { + const DELAY = 50; + + it('label', (done) => { + const vm = createVue({ + template: ` + + + + + + + `, + + data() { + return { + label: 'name' + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + expect(vm.$el.querySelector('.el-table__header th .cell').textContent).to.equal('name'); + vm.label = 'NAME'; + vm.$nextTick(() => { + expect(vm.$el.querySelector('.el-table__header th .cell').textContent).to.equal('NAME'); + }); + done(); + }, DELAY); + }); + + it('align', (done) => { + const vm = createVue({ + template: ` + + + + `, + + data() { + return { + align: 'left' + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + expect(vm.$el.querySelectorAll('.el-table__body td.is-right').length === 0).to.be.true; + vm.align = 'right'; + vm.$nextTick(() => { + expect(vm.$el.querySelectorAll('.el-table__body td.is-right').length > 0).to.be.true; + }); + done(); + }, DELAY); + }); + + it('width', (done) => { + const vm = createVue({ + template: ` + + + + `, + + data() { + return { + width: 100 + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + expect(vm.$el.querySelector('.el-table__body col').getAttribute('width')).to.equal('100'); + vm.width = 200; + vm.$nextTick(() => { + expect(vm.$el.querySelector('.el-table__body col').getAttribute('width')).to.equal('200'); + }); + done(); + }, DELAY); + }); + + it('min-width', (done) => { + const vm = createVue({ + template: ` + + + + `, + + data() { + return { + width: 100 + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + expect(vm.$el.querySelector('.el-table__body col').getAttribute('width')).to.equal('100'); + vm.width = 200; + vm.$nextTick(() => { + expect(vm.$el.querySelector('.el-table__body col').getAttribute('width')).to.equal('200'); + }); + done(); + }, DELAY); + }); + + it('fixed', (done) => { + const vm = createVue({ + template: ` + + + + + + + `, + + data() { + return { + fixed: false + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + expect(!vm.$el.querySelector('.el-table__fixed')).to.be.true; + vm.fixed = true; + vm.$nextTick(() => { + expect(!!vm.$el.querySelector('.el-table__fixed')).to.be.true; + }); + done(); + }, DELAY); + }); + + it('prop', (done) => { + const vm = createVue({ + template: ` + + + + + + + `, + + data() { + return { + prop: 'name' + }; + }, + + created() { + this.testData = getTestData(); + } + }, true); + + setTimeout(() => { + let firstColumnContent = vm.$el.querySelector('.el-table__body td .cell').textContent; + let secondColumnContent = vm.$el.querySelector('.el-table__body td:nth-child(2) .cell').textContent; + expect(firstColumnContent !== secondColumnContent).to.be.true; + vm.prop = 'release'; + vm.property = 'release'; + vm.$nextTick(() => { + firstColumnContent = vm.$el.querySelector('.el-table__body td .cell').textContent; + secondColumnContent = vm.$el.querySelector('.el-table__body td:nth-child(2) .cell').textContent; + expect(firstColumnContent === secondColumnContent).to.be.true; + }); + done(); + }, DELAY); + }); + }); + describe('methods', () => { const createTable = function(prop = '', opts) { return createVue({