update Table

update Table
This commit is contained in:
梁灏 2017-03-09 14:11:22 +08:00
parent b2012015da
commit 486d4fda19
9 changed files with 132 additions and 106 deletions

View file

@ -2,15 +2,17 @@
<div :class="classes">
<template v-if="renderType === 'index'">{{naturalIndex + 1}}</template>
<template v-if="renderType === 'selection'">
<Checkbox :checked="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox>
<Checkbox :value="checked" @on-change="toggleSelect" :disabled="disabled"></Checkbox>
</template>
<template v-if="renderType === 'normal'">{{{ row[column.key] }}}</template>
<template v-if="renderType === 'normal'"><span v-html="row[column.key]"></span></template>
</div>
</template>
<script>
import Vue from 'vue';
import Checkbox from '../checkbox/checkbox.vue';
export default {
name: 'TableCell',
components: { Checkbox },
props: {
prefixCls: String,
@ -29,7 +31,7 @@
return {
renderType: '',
uid: -1,
content: this.$parent.$parent.content
content: this.$parent.$parent.currentContent
};
},
computed: {
@ -51,14 +53,34 @@
const cell = document.createElement('div');
cell.innerHTML = template;
const _oldParentChildLen = $parent.$children.length;
$parent.$compile(cell); // todo ready
// $parent.$compile(cell); // todo ready
const _newParentChildLen = $parent.$children.length;
if (_oldParentChildLen !== _newParentChildLen) { // if render normal html node, do not tag
this.uid = $parent.$children[$parent.$children.length - 1]._uid; // tag it, and delete when data or columns update
}
this.$el.innerHTML = '';
this.$el.appendChild(cell);
// this.$el.appendChild(cell);
let methods = {};
let $_parent = this.$parent;
while($_parent != null && $_parent._name != '<Table>'){
$_parent = $_parent.$parent;
}
if ($_parent) {
Object.keys($_parent).forEach(key => {
const func = this.$parent.$parent.$parent[`${key}`];
if(typeof(func) === 'function' &&func.name === 'boundFn'){
methods[`${key}`] = func;
}
});
}
const res = Vue.compile(cell.outerHTML);
const compt = new Vue({
render: res.render,
staticRenderFns: res.staticRenderFns,
methods: methods
});
compt.$mount(this.$el);
}
},
destroy () {
@ -73,7 +95,7 @@
this.$parent.$parent.toggleSelect(this.index);
}
},
compiled () {
created () {
if (this.column.type === 'index') {
this.renderType = 'index';
} else if (this.column.type === 'selection') {
@ -84,8 +106,10 @@
this.renderType = 'normal';
}
},
ready () {
this.compile();
mounted () {
this.$nextTick(() => {
this.compile();
});
},
beforeDestroy () {
this.destroy();