2015-01-07 2 views
0

핸즈프리 스 스프레드 시트에서 열 매핑을 수행하려고하는데 동적으로 스프레드 시트를로드하고 각 행 앞에 확인란을 추가하려고합니다. 내 연구를 기반으로하고 How to add properties dynamically to each object in an javascript array을 포함하여이 작업을 수행하는 가장 좋은 방법은 handsontable "columns"속성에 대한 객체 배열을 만드는 것입니다. http://jsfiddle.net/kc11/o4d6gr6n/에서 확인할 수 있습니다.자바 스크립트 객체 키로 객체 배열 만들기

그래서 내가해야 할 일을 만드는 것입니다 :

[ 
      {data: "check", type: 'checkbox'}, 
      {data: "year", type: 'text'}, 
      {data: "car", type: 'text'}, 
      {data: "available", type: 'text'}, 
      {data: "comesInBlack", type: 'text'}, 
      ] 

에서 :

: 나는 '확인'열을 열 열쇠를 얻고 앞에 붙이는 시작

function getCarData() { 
    return [ 
     {car: "Mercedes A 160", year: 2006, available: true, comesInBlack: 'yes'}, 
     {car: "Citroen C4 Coupe", year: 2008, available: false, comesInBlack: 'yes'}, 
     {car: "Audi A4 Avant", year: 2011, available: true, comesInBlack: 'no'}, 
     {car: "Opel Astra", year: 2004, available: false, comesInBlack: 'yes'}, 
     {car: "BMW 320i Coupe", year: 2011, available: false, comesInBlack: 'no'} 
    ]; 
    } 

var keys = $.map(getCarData()[0], function(element,key) { return key; }); 
keys.unshift("check"); 

하지만 내 제한된 JS 지식으로 나는 나머지 길로가는 방법을 모르겠다. 아무도 내게 다음에 무엇을해야한다고 조언 할 수 있습니까?

+0

데이터 세트가 정적 인 경우 하드 코딩해야합니다. 각 열의 유형을 추측 할 방법이 없습니다 (확인란을 제외한 모든 텍스트가 아닌 한 특정 시점에서 변경해야 할 수 있습니다). – Nit

+0

소스에서'data'와'type'을 얻는 방법을 모르겠습니다. –

+0

모든 열은 확인란 열을 제외하고는 텍스트입니다 – user61629

답변

1

난 당신이 할 수있는 check 키를 추가하려는 생각 문서에서 checkbox template 열 (고화질)를 사용 배열의 각 객체는 getCarData에 의해 반환됩니다. 키 값을 지정하지 않았으므로 각 개체에 대해 true으로 설정했습니다.

[{"car":"Mercedes A 160","year":2006,"available":true,"comesInBlack":"yes","check":"true"},{"car":"Citroen C4 Coupe","year":2008,"available":false,"comesInBlack":"yes","check":"true"},{"car":"Audi A4 Avant","year":2011,"available":true,"comesInBlack":"no","check":"true"},{"car":"Opel Astra","year":2004,"available":false,"comesInBlack":"yes","check":"true"},{"car":"BMW 320i Coupe","year":2011,"available":false,"comesInBlack":"no","check":"true"}] 

JSFiddle :

function getCarData() { 
    return [ 
     {car: "Mercedes A 160", year: 2006, available: true, comesInBlack: 'yes'}, 
     {car: "Citroen C4 Coupe", year: 2008, available: false, comesInBlack: 'yes'}, 
     {car: "Audi A4 Avant", year: 2011, available: true, comesInBlack: 'no'}, 
     {car: "Opel Astra", year: 2004, available: false, comesInBlack: 'yes'}, 
     {car: "BMW 320i Coupe", year: 2011, available: false, comesInBlack: 'no'} 
    ]; 
    }; 
    //This is where I add the 'check' key 
    var addCheckKey=function(obj){ 
     obj.check='true'; 
     return obj; 
    }; 
    var data=$.map(getCarData(),addCheckKey); 

이 데이터를 생성 http://jsfiddle.net/vb1om7om/2/

나와 문제 코드 전에 getCarData 의해 생성 된 배열의 각 개체의 키 배열을 작성 하였다이었다 해당 배열에 새 항목을 추가하는 것입니다. 이렇게하면 원본 개체에 영향을 미치지 않습니다.

+0

이것은 정확하게 필요한 것입니다. 감사합니다! 하지만 나는 "obj.check"를 이해하지 못한다. JS의 모든 객체는 체크 박스가 될 수 있는가? – user61629

+0

@ user61629'obj.check'는 도트 연산자 ('.')를 사용하여'obj' 객체의'check' 키에 접근합니다. 존재하지 않는 키에 지정하면 키가 생성됩니다. 예를 들어, 객체가'{car : 'Mercedes'}'이고'var obj = {car : 'Mercedes', year : 2006}, obj.check = true;log (obj);', 당신은 객체가 이제 {{car : 'Mercedes', 2006 : check, true}'라는 것을 알 수 있습니다. –

2

캔 배열을 통해 루프와 같은 일을 재산 추가

var myData = getCarData(); 
$.each(myData, function(){ 
    /* add new property "checked" */ 
    this.checked = false 
}); 

/* or */ 
var myData = $.map(getCarData(), function(row){ 
     row.checked = false; 
     return row; 
}); 
/* returns rows like 
{checked:false, car: "Mercedes A 160", year: 2006, available:....}*/ 

그런 다음

var example2 = document.getElementById('example2'); 
var hot2 = new Handsontable(example2,{ 
    data:myData, 
    columns: [ 
     { 
     data: "checked", 
     type: "checkbox", 
     checkedTemplate: true, 
     uncheckedTemplate: false 
    }, 
    {data: "year", type: 'text'}, 
    {data: "car", type: 'text'}, 
    {data: "available", type: 'text'}, 
    {data: "comesInBlack", type: 'text'}, 
    ] 
}); 
+0

매우 – user61629

+0

고맙습니다.이 솔루션은 더 포괄적이어서 다른 답변보다 먼저 배치되었으므로 다른 하나를 선택하는 것이 이상합니다. – charlietfl

+0

Charlietfl, 답변을 upvoted. 나는 그것이 내가 상상했던 것에 더 가깝기 때문에 다른 대답을 선택하고 있지만 코드 작성법을 알지 못했다. 나는 당신의 대답에서 배우려고 노력하고 있으며, 나는 js와 handsontable로 계속 일하면서 그것에 대해 언급 할 것입니다. 그것을 입력 해 주셔서 감사합니다. - Bill – user61629