HandsonTable, передавая данные в дочернее окно и window.open

0

Поэтому я пытаюсь просто открыть всплывающее окно и заполнить его с помощью массива массивов. Данные, переданные от родителя к ребенку, выглядят следующим образом:

[
  ['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/

Любая помощь будет принята с благодарностью!

Теги:
handsontable
window.open

2 ответа

0
Лучший ответ

Решил использовать другой подход для решения проблемы. Поскольку данные были загружены через CSV, я просто потянул информацию внутри всплывающего окна через ajax.

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);
  • 0
    Спасибо за помощь. Если я прав, typeof [] всегда является object в JavaScript. Я нашел эту строку кода ранее, и она все еще не решает проблему. Уродливым обходным решением было просто сохранить данные на диск и прочитать файл во всплывающем окне. Не лучшее решение, но выполняет свою работу.
  • 0
    Спасибо за помощь, хотя!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню