HandsonTable,将数据传递给子窗口,以及window.open

时间:2014-03-28 17:31:15

标签: javascript jquery window.open handsontable

所以我试图简单地打开一个弹出窗口并用数组数组填充handsontable。从父级传递给子级的数据如下所示:

[
  ['one', 'two', 'three'],
  ['four', 'fix', 'six'],
  ['seven', 'eight', 'nine']
]

如果我从父窗口调用表设置方法并传入上面的数据,那么handsontable会给我一个错误。

var w = window.open('...');
// wait for load
w.editor.loadTable([['one','two'],['three','four']]);

以上错误导致以下错误:

Uncaught Error: Cannot create new column. When data source in an object, 
you can only have as much columns as defined in first data row, data 
schema or in the 'columns' setting.If you want to be able to add new 
columns, you have to use array datasource.

但是,如果我没有传入数组,比如......

w.editor.loadTable();

...子弹出窗口生成数组,所有工作都按预期工作。我最好的猜测是,我将数据从父母发送到子窗口时出现了一些误解,或者它终于发生了......我已经失去了理智。

我已经整理了一个简单的测试,以显示可以在此处找到的问题:http://scottdover.com/ht_test/

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

返回错误的代码是:

if (this.instance.dataType === 'object' || this.instance.getSettings().columns) {
  throw new Error("Cannot create new column. When data source in an object, " +
    "you can only have as much columns as defined in first data row, data schema or in the 'columns' setting." +
    "If you want to be able to add new columns, you have to use array datasource.");

它会进行两次检查,如果你进行调试,你会发现它实际上是第一次产生错误的检查。

虽然您使用数组数组设置数据,但是当您从父窗口传递数据时,它会变成带有对象的对象(很奇怪,但这就是调试器所说的)。您可以使用调试器进行检查(尝试data instanceof Array

我建议你使用JSON.stringify将数据传递给弹出窗口,然后使用JSON.parse将其转换回数组:

openWindowWith(JSON.stringify([
                ['one','two','three'],
                ['four','five','six'],
                ['seven','eight','nine']
            ]));

...

if (!data) {
              data = [
                ['one', 'two', 'three'],
                ['four', 'fix', 'six'],
                ['seven', 'eight', 'nine']
              ];
          } else data = JSON.parse(data);

答案 1 :(得分:0)

决定采取另一种方法来解决问题。由于数据是通过CSV上传的,我只需通过ajax在弹出窗口中输入信息。