2009-08-17 10 views
16

Dado este código de ejemplo siguiente, que clona una fila de la tabla, establece algunas propiedades y luego lo anexa a una tabla:¿Existe alguna forma preferida de formatear las cadenas jQuery para que sean más legibles?

$("#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() 
); 

¿Alguien tiene alguna sugerencia en cuanto a cómo esto puede ser formateado para ser más fácil en el ojo? ¿Hay alguna convención aceptada para hacer esto?

Sería útil tener un conjunto de reglas que se pueden seguir y que se pueden incorporar a un conjunto de normas.

Respuesta

23

Me refactorizaría a esto. Encuentro más de 3 métodos encadenados inseguro en el ojo

 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

me gusta esto, porque refleja mi forma de expresión regular - tener una súper-expresión regular a menudo es menos comprensible que 2-3 pequeños tamaños de mordida –

+3

Esto es mucho mejor. El hecho de que * puedas * encadenar no significa que * deberías *. –

+1

Siempre me he preguntado sobre esto, debo confesar. Mi nerviosismo con este enfoque es que estás almacenando en caché una variable que ya está en la memoria caché (en la pila de cadenas). Dado que algunos podrían ser bastante grandes, ¿no es mejor encadenar, o es esto una carga aceptable? –

4

¿Qué tal:

$("#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() 
); 

encuentro que el encadenamiento, cuando se utiliza en moderación, puede conducir a una mejor legibilidad.

2

No encadene tanto.

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); 

Menos cadenas, pero parece más fácil de leer imo.

13

me guión como si estuviera entre corchetes:

$("#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

Pierdo el hecho de que algo se adjunta a la mesa de fondos aquí. – redsquare

+1

puede dividir y agregar un nivel extra de sangría en la línea 2 allí – nickf

Cuestiones relacionadas