tl;博士:我正在生成一个包含可编辑单元格的表格,类似于下图。我有它,所以单元格是可编辑的并且总更新,但我正在努力找出我需要遵循的过程来实际添加新的行和列。
最终用户可以编辑除总计之外的所有单元格,例如单元格 [ex1][item1] 可以从 100 更改为 150,然后会引发一个事件,将该行的总计从 320 更新为 370 .
最初我在 HTML 文件中定义主模板...
<div class="container" id="app">
<script type="text/x-template" id="datagrid-template">
<table class="table-striped">
<thead>
<headerrow v-bind:columns="columns"></headerrow>
</thead>
<tbody>
<datarow v-for="row in rows" v-bind:columns="columns" v-bind:data="row"></datarow>
</tbody>
</table>
</script>
<div class="row">
<div class="col-sm-10">
<datagrid v-bind:columns="columns" v-bind:data="rows"></datagrid>
</div>
<div class="col-sm-2">
<div class="row">
<button type="button" v-on:click="addColumn()">Add Column</button>
</div>
<div class="row">
<button type="button" v-on:click="addRow()">Add Row</button>
</div>
</div>
</div>
</div>
在 JS 文件中,我初始化了主要的 Vue 元素......
var app = new Vue({
el: "#app",
data: {
categories: [...],
companies: [...]
},
methods: {
addRow: function() {
console.log(this.$children[0]);
},
addColumn: function() {
this.$children[0].columns.push({value: 'test'});
}
}
});
然后我有 6 种主要的不同组件类型:
- 数据输入(通用输入单元)
- 数据头(扩展数据输入)
- 数据单元(扩展数据输入)
- baserow(表格中的行)
- headerrow(扩展baserow,由dataheaders组成)
- datarow(扩展baserow,由datacells组成)
我这样添加一行和单元格
基行
var baseRow = {
render: function(createElement) {
return createElement('tr', {}, this.getProps(createElement));
},
props: {...}
}
};
标题行
Vue.component('headerrow', {
mixins: [baseRow],
methods: {
getProps: function(createElement) {
var comps = [];
this.$options.propsData.columns.forEach(function(el) {
comps.push(createElement('dataheader', {
props: {...}
}));
});
return comps;
}
}
});
<datagrid>
当我单击添加列时,我可以在查看使用 chrome 扩展程序时看到“测试”被添加到列道具中。此外,我看到“测试”被添加到了<headerrow>
columns 属性中,但 UI 中没有任何实际生成。我假设这是我最初如何渲染行和列的结果,并且我只是有某种基本的误解......谁能提供一些关于我出错的地方和地方的方向?