- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试实现handsontable
。根据我的要求,我想通过更改下拉值重新呈现 handsontable
,但是在下拉选择时,handsontable
没有正确更新。下面是我的代码:
Handsontable.vue:
<template>
<div id="hot-preview">
<HotTable :settings="settings" :ref="referenceId"></HotTable>
<div></div>
</div>
</template>
<script>
import { HotTable } from '@handsontable-pro/vue';
export default {
components: {
HotTable
},
props: ['settings', 'referenceId'],
}
</script>
<style>
#hot-preview {
max-width: 1050px;
height: 400px;
overflow: hidden;
}
</style>
父组件:
<template>
<div id="provisioning-app">
<v-container grid-list-xl fluid>
<v-select
:items="selectList"
item-text="elementName"
item-value="elementName"
label="Standard"
v-model="selected"></v-select>
<handsontable :settings.sync="settings" :referenceId="referenceId"></handsontable>
</v-container>
</div>
</template>
<script>
import Handsontable from '@/components/Handsontable';
import PrevisioningService from '@/services/api/PrevisioningService';
export default {
components: {
Handsontable
},
data: () => ({
selectList: [],
selectApp: [],
selectedOption: '',
referenceId: 'provision-table',
}),
created(){
PrevisioningService.getProvisioningList(this.$session.get('userId'), this.$session.get('customerId')).then(response => {
this.provisioningList = response;
});
},
beforeUpdate() {
this.provisioningApp = this.getProvisioningAppList;
},
computed: {
settings () {
return {
data: this.getSelectApp,
colHeaders: ["Data Uploaded on", "Duration in Minutes", "Start Time", "Shift","Description","Next Day Spill Over", "Site Name"],
columns: [
{type: 'text'},
{type: 'text'},
{type: 'text'},
{type: 'text'},
{type: 'text'},
{type: 'text'},
{type: 'text'}
],
rowHeaders: true,
dropdownMenu: true,
filters: true,
rowHeaders: true,
search: true,
columnSorting: true,
manualRowMove: true,
manualColumnMove: true,
contextMenu: true,
afterChange: function (change, source) {
alert("after change");
},
beforeUpdate: function (change, source) {
alert("before update");
}
}
},
getSelectApp () {
if(this.selectedOption !== undefined && this.selectedOption !== null && this.selectedOption !== ''){
PrevisioningService.getProvisioningAppList(this.selectedOption, this.$session.get('userId'), this.$session.get('customerId')).then(response => {
this.provisioningApp = response;
return this.provisioningApp;
});
}
}
},
method: {
getSelected () {
return this.selectedOption;
}
}
};
</script>
使用上面的代码,我的数据从服务器成功接收,但是我无法更新handsontable
中的数据,如下截图所示:
如何在下拉选择后正确呈现表格?
最佳答案
我看到两个问题:
handsontable
似乎无法处理动态 settings
(参见 console errors ),所以 settings
不应该是计算属性。由于唯一需要更新的设置属性是 settings.data
, 应该单独改变该属性(即不要重置 settings
的值)。
要解决此问题,请移动 settings
进入data()
, 正在初始化 settings.data
至 null
这样它仍然是 react 性的:
data() {
settings: {
data: null,
colHeaders: [...],
...
}
},
computed: {
// settings() { } // DELETE THIS
}
getSelectApp
是一个错误异步的计算属性(即,在这种情况下,它获取数据并稍后处理响应)。计算属性不能是异步的,所以这个计算属性实际上返回 undefined
.虽然有一个 return
在计算属性内部调用,返回不设置计算属性的值,因为它在 Promise
callback 内部:
PrevisioningService.getProvisioningAppList(/*...*/).then(response => {
this.provisioningApp = response;
return this.provisioningApp; // DOES NOT SET COMPUTED PROPERTY VALUE
});
另请注意 side effect来自 this.provisioningApp = response
.好像没有this.provisionApp
在任何情况下都需要此代码,因此应将其删除以进行清理。
这个计算属性的目的似乎是更新 settings.data
基于所选选项的值。为此,您必须使用 watcher在 selectedOption
, 这会改变 settings.data
.
watch: {
selectedOption(val) {
PrevisioningService.getProvisioningAppList(/*...*/).then(response => {
this.settings.data = response;
});
}
},
关于vue.js - handsontable 中更新内容数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880602/
如何使用 handsontable 中的 handsontable 禁用特定列。我希望第一列仅可编辑,其他三列被禁用。我对三列使用 readonly true 但如何禁用它不起作用....
如何使用 handsontable 中的 handsontable 禁用特定列。我希望第一列仅可编辑,其他三列被禁用。我对三列使用 readonly true 但如何禁用它不起作用....
似乎是一项简单的任务,但我还没有找到简单的解决方案。我的数据有时以空数组的形式出现,以便用户可以开始处理空表(标题除外)。该表有一个 minSpareRows:1所以我希望表格会出现那个备用行而不是其
问题 :我可以更改单元格的背景颜色,但不能更改标题的背景颜色。我可以在 Handsontable 中更改标题的背景颜色和字体颜色吗? 最佳答案 您可以为此使用 jquery 或 css。例如,将背景颜
客户 ID 列设置为使用自动完成。自动完成值将各种客户信息连接在一起,以帮助用户选择正确的信息。选择后,客户 ID 将放入网格中。 我无法弄清楚如何使自动完成弹出窗口更宽,以便它适合连接的信息。 这就
在 Handsontable 中,当单击列标题时,将选择该列的所有单元格。有办法防止这种情况发生吗? 我认为文档中没有这样的选项。我也没有在 Handsontable 库本身的源代码中找到事件在 DO
我正在尝试像这样更新 Handsontable 中的列设置: var newColumnSettings = [{ data: 0, readOnly: true }, { data: 1 }, {
我可以看到有一些方法可以在渲染前在单元格数组中创建注释,并使用上下文菜单。但是有没有办法在更改后创建评论? 我最初试过这个: var errors = []; var hot = new Handso
如何在此下拉菜单中允许固定高度? (柱车) 我一直在无休止地摆弄以解决高度问题。我想要一个最大 300px 的固定高度下拉菜单。我用过AutoRowSize handsontable 站点中的高度功能
我正在尝试在 Handsontable 网格内使用“Handsontable”编辑器。我希望用户能够从“下拉”类型菜单中进行选择,但该菜单显示多列相关数据(用户正在选择一个 ID 号,我希望能够显示相
我正在尝试使用 Handsontable 版本 0.34.4CE/1.14.2 PRO 在 Handsontable (HOT-in-HOT) 中创建 Handsontable。根据此处提供的文档,一
有没有什么方法可以从列名中获取列号? 我只能检索列名,我需要 getCellMeta 的列号。 谢谢 最佳答案 使这个功能解决了我的问题: function GetColFromName(name)
我正在尝试将handsontable下拉列表的宽度设置为根据查找数据宽度,而不是列宽。如何做到这一点? 请看下图。下拉列表太窄,无法容纳查找数据。 最佳答案 https://github.com/ha
我希望能够在Handsontable中编辑列标题的文本,但似乎无法弄清楚是否可以使它们可编辑。我想我可以将标题改成另一行,但我想尽可能避免这种情况。 澄清一下:我实际上是在寻找一种允许用户编辑 hea
是否可以在事件内部更改 Handsontable 实例中的源? 下面是我的代码: var container2 = $('#example2'); var hot2 = new Handsontabl
HandsonTable 不会渲染所有行 - 它仅加载所有行的一部分。但是,当我执行 Ctrl+A 并将其粘贴到 Excel 中时,我会看到所有行。为什么 Handsontable 不显示所有行?
我正在尝试动态地将一列添加到手动表中。我在任何地方都没有看到示例,也没有在 API 中看到这样做的方法。有没有人找到一种方法来克服这个问题,或者有一些示例代码可供我查看,这会有所帮助。 谢谢。 最佳答
是否可以让 Handsontable 中的数据按未显示的字段排序?我有一个数据网格,我想显示它包含一个名为“sortOrder”的列,但我不想显示它。 排序需要在客户端完成,因为事件是通过网络套接字传
我正在使用 handsontable,我的代码是用 typescript/aurelia 编写的。我无法将复选框列居中对齐。我关注了this链接并将我的复选框列上的 className 设置为“htC
是否可以设置 max-width和 max-height对于 Handsontable 中的单元格? 我试图通过 CSS 在 上进行设置和 元素,但这不起作用。 我在文档中看到您可以将列设置为特定宽
我是一名优秀的程序员,十分优秀!