2009-08-17 14 views
16

Data questa seguente codice di esempio, che clona una riga della tabella, imposta alcune proprietà e quindi lo aggiunge a una tabella:C'è un modo preferito di formattare le catene jQuery per renderle più leggibili?

$("#FundTable").append(
    objButton.parents("tr").clone() 
     .find(".RowTitle").text("Row " + nAddCount).end() 
     .find(".FundManagerSelect").attr("id", "FundManager" + nAddCount) 
           .change(function() { ChangeFundRow(); }).end() 
     .find(".FundNameSelect").attr("id", "FundName" + nAddCount).end() 
); 

Qualcuno ha qualche suggerimento su come questo potrebbe essere formattato per essere più facile per gli occhi? C'è qualche convenzione accettata per fare questo?

Sarebbe utile disporre di un insieme di regole che possono essere seguite e che possono essere incorporate in un insieme di standard.

risposta

23

Mi farebbe da refactoring. Trovo più di 3 metodi incatenato disagio per gli occhi

 var $clonedRow = objButton.parents("tr").clone(); 

     $clonedRow.find(".RowTitle") 
       .text("Row " + nAddCount); 

     $clonedRow.find(".FundManagerSelect") 
       .attr("id", "FundManager" + nAddCount) 
       .change(ChangeFundRow); 

     $clonedRow.find(".FundNameSelect") 
       .attr("id", "FundName" + nAddCount); 

     $clonedRow.appendTo("#FundTable"); 
+2

Mi piace questo, perché rispecchia il mio approccio alla regex - avere una super-regex è spesso meno comprensibile rispetto a 2-3 piccoli morsi più piccoli –

+3

Questo è molto meglio. Solo perché la catena * can * non significa che * dovresti *. –

+1

Mi sono sempre chiesto questo, devo confessare. Il mio nervosismo con questo approccio è che stai memorizzando nella cache una variabile che è già stata memorizzata nella cache (nella catena di stack). Dato che alcuni potrebbero essere abbastanza grandi, non è meglio per catena, o è un overhead accettabile? –

4

ne dite:

$("#FundTable").append(
    objButton.parents("tr").clone() 
     .find(".RowTitle").text("Row " + nAddCount) 
     .end() 
     .find(".FundManagerSelect").attr("id", "FundManager" + nAddCount) 
     .change(function() { 
      ChangeFundRow() 
     }) 
     .end() 
     .find(".FundNameSelect").attr("id", "FundName" + nAddCount) 
     .end() 
); 

trovo che il concatenamento, se usato in moderazione, può portare ad una migliore leggibilità.

2

Non stringere troppo.

var newContent = objButton.parents("tr").clone(); 

newContent.find(".RowTitle").text("Row " + nAddCount) 
newContent.find(".FundManagerSelect").attr("id", "FundManager" + nAddCount) 
    .change(function() { ChangeFundRow() }); 
newContent.find(".FundNameSelect").attr("id", "FundName" + nAddCount); 

$("#FundTable").append(newContent); 

Meno concatenamento, ma sembra più facile da leggere imo.

13

mi trattino come se fosse tra parentesi:

$("#FundTable") 
    .append(objButton.parents("tr") 
     .clone() 
     .find(".RowTitle") 
      .text("Row " + nAddCount) 
     .end() 
     .find(".FundManagerSelect") 
      .attr("id", "FundManager" + nAddCount) 
      .change(function() { 
       ChangeFundRow(); // you were missing a semicolon here, btw 
      }) 
     .end() 
     .find(".FundNameSelect") 
      .attr("id", "FundName" + nAddCount) 
     .end() 
    ) 
; 
+0

Perdo il fatto che qualcosa è stato aggiunto a finanziabile qui. – redsquare

+1

potresti dividere e aggiungere un ulteriore livello di indentazione sulla linea 2 lì – nickf

Problemi correlati