Ho una funzione JS che prende i dati JSON e crea una tabella HTML. Mentre il mio progetto si sviluppava, avevo bisogno di una tabella specifica da creare con un pulsante - così ho aggiunto un'opzione alla funzione e un'appropriata dichiarazione if
. Poi ho deciso che volevo aggiungere un'opzione per il colore della tabella: un'altra opzione; un'altra dichiarazione if
.
Infine, desidero ora aggiungere un'altra opzione per colorare le righe a seconda del contenuto del parametro in ogni riga di dati. Ma questo è SOLO per un set specifico di dati JSON che invierò, quindi ora devo aggiungere un'altra opzione e un'istruzione if
molto specifica per catturare questo tipo di tabella.
Cosa mi piacerebbe sapere: c'è un modo migliore per farlo? La maggior parte del codice per creare la tabella è generica quindi non si desidera creare nuove funzioni per ogni caso d'uso. Ma ora la funzione sta diventando piena di opzioni e if
s e non è sicuro se questa sia considerata una cattiva pratica.
Modifica: dopo alcune ricerche ulteriori, penso di chiedere informazioni sull'overload delle best practice. Ma, da quello che capisco, l'overloading in JS riguarda il fatto di avere un sacco di if
s o switch...case
che essenzialmente non sono sicuro del modo migliore di fare o se è addirittura appropriato.
Qualche codice con domande nei commenti (modificato per tenerlo breve):
function CreateTableFromJSON(jData, colour, addBtnToCol) {
table.className = "ui collapsing striped table unstackable " + colour; // Adds the colour option.
// Add JSON data to the table as rows.
for (var i = 0; i < jData.length; i++) {
var tr = tbody.insertRow(-1);
for (var j = 0; j < col.length; j++) {
var tabCell = tr.insertCell(-1);
// This 'option' adds a button if the column is a particular value
// Is better practice to keep the main function (create table) generic and then call another (sub?) function to add the button to the created table?
if(col[j] === addBtnToCol){
var btnAdd = document.createElement('button');
btnAdd.type = "button";
tabCell.appendChild(btnAdd);
}
else
tabCell.innerHTML = jData[i][col[j]];
}
}
}