2014-07-07 65 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%的機會:P – 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; 
} 

更改通知,您可以使用onClickonChange
http://www.dyn-web.com/tutorials/forms/radio/onclick-onchange.php

+0

謝謝。我想在我的情況下創建Map要好得多:D。對於onClick,我的代碼中有一個小錯誤,所以我修正了它,現在它正在工作:) – C0iL

+0

Map有一個好處,您可以在運行時輕鬆構建/操作它。 –

+1

@ C0iL在現實世界的應用程序中,您將從服務器獲取這些數據。例如,以JSON格式(鍵/值對映射)。 Dart List與矢量(數組)更接近於經典列表,因爲它具有隨機訪問。如果你想要一些專門用於這類任務的東西(練習),那麼你可以使用dart:collection中的Queue。 – JAre