2014-07-07 5 views
1

저는 웹 프로그래밍에 익숙하지 않고 지금까지 단 하나의 라디오 버튼이나 체크 박스가있는 행이있는 테이블을 작성했습니다 ...하지만 이제는 다른 수의 라디오 버튼을 포함하는 행이있는 테이블. 내 테이블에는 2 개의 열만 있습니다. 첫 번째 열에는 행의 표시기 이름이 포함됩니다. 두 번째 열에는 라디오 버튼이 포함됩니다. 그래서 어떻게 여러 라디오 버튼을 포함하는 셀을 만들 수 있습니다. 어떤 행에는 10 개 이상의 라디오 버튼이 있으므로 누구도 10 개의 라디오 버튼을 하나씩 추가하려고하지 않을 것입니다.Dartlang : 라디오 버튼 수가 다른 테이블 행 만들기

편집 :이처럼 만든 :

List anketScoreList = [{'id': 'university','text': 'University Score'}, 
         {'id': 'gpa', 'text': 'GPA Score'}, 
         {'id': 'language', 'text': 'Language Score'}, 
         {'id': 'success', 'text': 'Success Score'}, 
         {'id': 'fabric', 'text': 'Fabric Score'}, 
         {'id': 'essay', 'text': 'Essay Score'}]; 
//Radio values 
List score3 = ["1", "1.5", "2"]; 
List score5 = ["1", "2", "3", "4", "5"]; 
List score10 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]; 

//creating table body 
anketScoreList.forEach((a) { 
    index += 1; 
    tbody.append(new Element.tr() 
     ..append(new TableCellElement()..text = index.toString()) 
     ..append(new TableCellElement()..append(new LabelElement() 
     ..text = a['text'] 
     ..setAttribute('for', a['id']))) 
     ..append(createRadioButtons(a))); 
}); 

Element createRadioButtons(metadata){ 
    List m; 
    if(metadata['id'] == "university"){ 
     m = score3; 
    } else if(metadata['id'] == "gpa" || metadata['id'] == "language" || 
       metadata['id'] == "essay"){ 
     m = score5; 
    } else if(metadata['id'] == "success" || metadata['id'] == "fabric"){ 
     m = score10; 
    } 

var td = new TableCellElement(); 
m.forEach((score){ 
    td.append(new InputElement() 
    ..type = "radio" 
    ..id = metadata['id'] 
    ..value = score 
    ..name = metadata['id'] 
    ..classes.add("radio") 
    ..onSelect.listen((e){ 
    }) 
); 
}); 
return td; 
} 

그래서이 작업을 수행 할 수있는 쉬운 방법이? 특별히 작성한 목록에는 성별, 유형 등 다른 값이 있다고 가정합니다 ...? 또한 나는 다른 작은 질문이 있습니다. 나는 onSelect를 시도했는데, 라디오 입력 요소를 onClick했지만 작동하지 않았다. x = x + 10과 같은 것으로 테스트했을 뿐이므로 내 onSelect.listen 함수에서 해당 코드를 제거했습니다. 당신이 무엇을 할 수 있는지

+1

내게 그게 당신이 무엇을 요구하고 있는지 완전히 불분명합니다. 무엇이 문제입니다? –

+0

@ GünterZöchbauer 약 75.4 %의 확률로 다양한 크기의 새 요소를 효율적으로 주입하는 방법을 묻습니다 (코드 : – JAre

+0

). – C0iL

답변

1

은 점수에 대한지도를 만들 수 있습니다 :

Map scores = { 
    'university': score3, 
    'gpa':, score5, 
    'language: score5, 
    'essay: score5, 
    'success': score10, 
    'fabric': score10 
}; 

당신의 createRadioButtons 변경 알림을 위해

Element createRadioButtons(metadata){ 

    // or use a switch 
    // 
    // List m; 
    // switch(metadata['id']) { 
    // case 'university': 
    //  m = score3; 
    //  break; 
    // case 'gpa': 
    // case 'language': 
    // case 'essay': 
    //  m = score5; 
    //  break; 
    // case 'success': 
    // case 'fabric': 
    //  m = score10; 
    //  break; 
    // }  

    var td = new TableCellElement(); 

    //m.forEach((score) { 

    scores[metadata['id']].forEach((score){ 
    td.append(new InputElement() 
     ..type = "radio" 
     ..id = metadata['id'] 
     ..value = score 
     ..name = metadata['id'] 
     ..classes.add("radio") 
     ..onSelect.listen((e){ 

     }) 
    ); 
    }); 
    return td; 
} 

로 단순화 할 수 당신이 사용할 수를 onClick 또는 onChange
http://www.dyn-web.com/tutorials/forms/radio/onclick-onchange.php

+0

감사합니다. 내 생각에지도를 만드는 것이 훨씬 낫습니다. D. onClick의 경우 코드에 약간의 실수가 있었기 때문에 문제가 해결되어 현재 작동 중입니다. – C0iL

+0

지도에는 런타임에 쉽게 빌드/조작 할 수 있다는 이점이 있습니다. –

+1

@ C0iL 실제 ​​응용 프로그램에서는 서버에서이 데이터를 가져옵니다. 예를 들어, JSON 형식 (키/값 쌍의 맵). 다트 목록은 벡터 (배열)와 비슷하지만 임의의 액세스가 있으므로 클래식 목록에 더 비슷합니다. 이러한 종류의 작업 (연습용)에 특화된 것을 원하면 dart : collection의 Queue를 사용할 수 있습니다. – JAre

관련 문제