From 1239c98511870ad76be1d449cef244a32fbb3ef9 Mon Sep 17 00:00:00 2001 From: "cinwell.li" Date: Fri, 18 Nov 2016 15:00:22 +0800 Subject: [PATCH] Table: add context prop (#1161) --- examples/docs/zh-CN/table.md | 113 ++++++++++++++++++++++++++++- packages/table/src/table-body.js | 3 +- packages/table/src/table-column.js | 6 ++ packages/table/src/table.vue | 3 + 4 files changed, 122 insertions(+), 3 deletions(-) diff --git a/examples/docs/zh-CN/table.md b/examples/docs/zh-CN/table.md index 1c6eaf3f4..4ce5a294b 100644 --- a/examples/docs/zh-CN/table.md +++ b/examples/docs/zh-CN/table.md @@ -110,6 +110,18 @@ }, methods: { + handleClick() { + console.log('click'); + }, + + handleEdit(index, row) { + console.log(index, row); + }, + + handleDelete(index, row) { + console.log(index, row); + }, + handleSelectionChange(val) { this.multipleSelection = val; }, @@ -512,11 +524,12 @@ - 查看 + 查看 编辑 @@ -525,6 +538,12 @@ +``` +::: + ### Table Attributes | 参数 | 说明 | 类型 | 可选值 | 默认值 | |---------- |-------------- |---------- |-------------------------------- |-------- | @@ -973,6 +1080,7 @@ | highlight-current-row | 是否要高亮当前行 | boolean | — | false | | row-class-name | 行的 className 的回调。 | Function(row, index) | — | — | | row-key | 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能的情况下,该属性是必填的 | Function(row)/String | — | — | +| context | 设置上下文环境,例如设置当前上下文就是 `_self`,父级就是 `$parent`,根组件 `$root`。优先读取 column 的 context 属性。 | Object | - | Table 所处上下文 | ### Table Events | 事件名 | 说明 | 参数 | @@ -1008,7 +1116,8 @@ | resizable | 对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真) | boolean | — | true | | formatter | 用来格式化内容 | Function(row, column) | — | — | | show-overflow-tooltip | 当内容过长被隐藏时显示 tooltip | Boolean | — | false | -| inline-template | 指定该属性后可以自定义 column 模板,参考多选的时间列,通过 row 获取行信息,JSX 里通过 _self 获取当前上下文。此时不需要配置 prop 属性。总共可以获取到 `{ row(当前行), column(当前列), $index(行数), _self(当前上下文), store(table store) }` 的信息。 | — | — | +| context | 设置上下文环境,例如设置当前上下文就是 `_self`,父级就是 `$parent`,根组件 `$root` | Object | - | Table 所处上下文 | +| inline-template | 指定该属性后可以自定义 column 模板,参考多选的时间列,通过 row 获取行信息。总共可以获取到 `{ row(当前行), column(当前列), $index(行数), store(table store) }` 以及 Table 所处的上下文环境。 | — | — | | align | 对齐方式 | String | left, center, right | left | | class-name | 列的 className | string | — | — | | selectable | 仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选 | Function(row, index) | — | — | diff --git a/packages/table/src/table-body.js b/packages/table/src/table-body.js index 9f431bec6..f5cc2e5b3 100644 --- a/packages/table/src/table-body.js +++ b/packages/table/src/table-body.js @@ -5,6 +5,7 @@ export default { store: { required: true }, + context: {}, layout: { required: true }, @@ -43,7 +44,7 @@ export default { on-mouseenter={ ($event) => this.handleCellMouseEnter($event, row) } on-mouseleave={ this.handleCellMouseLeave }> { - column.renderCell.call(this._renderProxy, h, { row, column, $index, store: this.store, _self: this.$parent.$vnode.context }) + column.renderCell.call(this._renderProxy, h, { row, column, $index, store: this.store, _self: this.context || this.$parent.$vnode.context }) } ) diff --git a/packages/table/src/table-column.js b/packages/table/src/table-column.js index 139068853..fd9ea95eb 100644 --- a/packages/table/src/table-column.js +++ b/packages/table/src/table-column.js @@ -100,6 +100,7 @@ export default { type: Boolean, default: true }, + context: {}, align: String, showTooltipWhenOverflow: Boolean, showOverflowTooltip: Boolean, @@ -186,6 +187,7 @@ export default { minWidth, width, isColumnGroup, + context: this.context, align: this.align ? 'is-' + this.align : null, sortable: this.sortable, sortMethod: this.sortMethod, @@ -211,6 +213,7 @@ export default { column.renderCell = function(h, data) { if (_self.$vnode.data.inlineTemplate) { renderCell = function() { + data._self = _self.context || data._self; if (Object.prototype.toString.call(data._self) === '[object Object]') { for (let prop in data._self) { if (!data.hasOwnProperty(prop)) { @@ -218,6 +221,9 @@ export default { } } } + // 静态内容会缓存到 _staticTrees 内,不改的话获取的静态数据就不是内部 context + data._staticTrees = _self._staticTrees; + data.$options.staticRenderFns = _self.$options.staticRenderFns; return _self.customRender.call(data); }; } diff --git a/packages/table/src/table.vue b/packages/table/src/table.vue index 387ec1520..8747485a3 100644 --- a/packages/table/src/table.vue +++ b/packages/table/src/table.vue @@ -14,6 +14,7 @@