刷新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的主要内容,如果未能解决你的问题,请参考以下文章

页面刷新 整个页面刷新和局部刷新

js 刷新当前页

怎样局部刷新网页?

jQuery 局部刷新(div刷新及全局刷新)

HTML 页面刷新问题

react验证码刷新闪烁