2014-03-28 5 views
0

그래서 나는 팝업을 열어 배열 배열로 handsontable을 채우기 위해 노력하고 있습니다.HandsonTable, 자식 창에 데이터 전달 및 window.open

내가 부모 창에서 테이블 설정 방법을 호출하고 위의 데이터를 전달하면
[ 
    ['one', 'two', 'three'], 
    ['four', 'fix', 'six'], 
    ['seven', 'eight', 'nine'] 
] 

이 handsontable 나에게 오류를 제공합니다 : 아이의 부모로부터 전달 된 데이터는 것 같습니다. 내가 배열과 같은 전달하지 않는 경우 ...,

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(); 

... 아이 :

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

는 위의 다음과 같은 오류와 함께 실패 popup이 배열을 생성하고 모든 것이 예상대로 작동합니다. 내 최선의 추측은 내가 부모로부터 자식 창으로 데이터를 전송하는 것에 대한 오해가 있거나 그것이 결국 일어났습니다 ... 나는 내 마음을 잃었습니다. 어떤 도움을 크게 감상 할 수 http://scottdover.com/ht_test/

:

나는 여기에서 찾을 수 있습니다 문제를 보여주기 위해 함께 간단한 테스트를 넣었습니다!

답변

0

다른 방법으로 문제를 해결하기로 결정했습니다. 데이터가 CSV를 통해 업로드되었으므로 간단히 아약스를 통해 팝업 창에서 정보를 가져 왔습니다.

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."); 

그것은 두 가지 검사를 수행하고 디버깅하는 경우, 당신은 실제로 오류를 생성하는 첫 번째 검사입니다 볼 수 있습니다.

배열의 배열을 사용하여 데이터를 설정하더라도 부모 창에서 데이터를 전달하면 객체가있는 객체가됩니다 (이상하지만 디버거가 말하는 바입니다). 당신은 배열로 다시 변환 JSON.parse를 사용하여 다음

난 당신이 팝업에 데이터를 전달하는 JSON.stringify를 사용하는 것이 좋습니다 (data instanceof Array 시도) 및 디버거를 확인할 수 있습니다

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 []'는 항상 javascript에서'object'입니다. 나는 그 코드 줄을 더 일찍 발견했으나 여전히 문제를 해결하는 것 같지 않습니다. 추악한 해결 방법은 단순히 디스크에 데이터를 저장하고 팝업 내에서 파일을 읽는 것입니다. 최선의 해결책은 아니지만 일을 끝내는 것입니다. – sdover102

+0

도움을 주셔서 감사합니다! – sdover102

+0

게시하기 전에 솔루션을 사용해 보았습니다. IE11 (다른 브라우저에서는 확인할 수 없음)과 함께 작동합니다. 'typeof []'가'object'를 반환한다는 것은 사실입니다. 그래서'instanceof'를 사용합니다. 어쨌든, 더 이상 대답을 찾지 못했다면 질문에 답을 표시해 주시겠습니까? –