刷新handsontable
Posted
技术标签:
【中文标题】刷新handsontable【英文标题】:Refresh a handsontable 【发布时间】:2015-10-20 12:59:04 【问题描述】:我想刷新一个可动手操作的网格。我有一些带有下拉列表的列,其中填充了我的数据库数据。但是在我的页面中,我有一个在这个数据库中插入数据的第一个网格,然后我将它们放入我的第二个网格中。但由于我的第二个网格没有刷新,我无法获得我刚刚插入第一个网格的最后一个值。
那么我该如何的内容呢?
编辑:
我做了一个 jsfiddle 来说明我的问题: http://jsfiddle.net/9onuhpn7/10/ 在我的 jsFiddle 上,它可以工作,当我将它们推送到数组中时,我可以获得这些值。但是对于我的真实应用程序和数据库,它不起作用。
所以我的代码中有这个而不是数组(它可以工作,但没有刷新):
columns:[
<?php
$conn_string = "host=localhost port=5432 dbname=test_postgre user=postgres password='1234'";
$dbconn = pg_connect($conn_string);
$sql = "SELECT ".$colonne." FROM public.".$tablevar."";
$res = pg_query($sql) or die("Pb avec la requete: $sql");
$data = pg_fetch_all($res);
$indexedOnly = array();
foreach ($data as $row)
$indexedOnly[] = array_values($row);
echo 'type:\'dropdown\',';
echo 'source:'.json_encode($indexedOnly).',';
?>]
【问题讨论】:
我认为 mpusarla 是有道理的。你能给我们一个jsfiddle吗?我不确定我是否理解您的要求 @ZekeDroid 我编辑了我的帖子 【参考方案1】:只需调用hot.render();
,其中hot
指的是Handsontable
对象。
对我来说效果很好。
【讨论】:
我还要补充一点,有时 hot.render() 可能需要调用两次。 (在我的用例中,第一次调用调整了 HOT 的大小,但标题列和记录列未对齐,因此第二次调用强制对齐)。【参考方案2】:我现在明白了。您想动态更新下拉菜单的来源。使用以下代码应该很容易:
hot2.updateSettings(
columns: [
type: 'dropdown',
source: arrayTest
]
)
确保在 arrayTest
具有新值之后添加它,并且您应该准备好去。这是您的fiddle,在正确的位置添加了行。
【讨论】:
谢谢,但我发现了问题所在。当我使用 sql 请求从数据库中获取数据时,即使我刷新热点,请求也不会执行两次。所以我不得不用数据创建一个数组,就像在小提琴中一样。现在可以了。【参考方案3】:尝试将 observeChanges 选项设置为 true。这应该会检测到数据源的变化并再次渲染网格。
https://github.com/handsontable/handsontable/wiki/Options#constructor-options
【讨论】:
它似乎不起作用,即使它似乎是我正在寻找的东西。 我有这段代码,你知道我哪里做错了吗? var hot = new Handsontable(container, data: data_parcelle_elementaire, stretchH: 'all', minSpareRows: 1, observeChanges : true, rowHeaders: false, colHeaders: false, contextMenu: true, height: 550, 您可以尝试将 ColumnSorting 设置为 true。默认情况下,observeChanges 为 false,但将 ColumnSorting 设置为 true 将启用 observeChanges。 您的意思是删除“observeChanges”并添加“ColumnSorting”吗?或者两者都设置?对于他们两个,它都不起作用:/ 如果你能准备一个 jsfiddle,那会有所帮助。【参考方案4】:接受的答案对我不起作用,但以下代码运行良好。
let hot = new Handsontable(this.hotTableComponentTest.nativeElement,
data: [["","",""]] ,
...
);
if (value && value.length>0 && this.hot)
this.hot.getInstance().loadData(value);
this.hot.getInstance().render();
【讨论】:
以上是关于刷新handsontable的主要内容,如果未能解决你的问题,请参考以下文章