2009-08-17 3 views
16

Compte tenu de ce code ci-dessous de l'échantillon qui clone une ligne de table, définit des propriétés et ajoute ensuite à une table:Existe-t-il un moyen préféré de mettre en forme les chaînes jQuery pour les rendre plus lisibles?

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

Quelqu'un at-il des suggestions quant à la façon dont cela pourrait être formaté pour être plus facile sur l'oeil? Y a-t-il une convention acceptée pour faire cela?

Il serait utile d'avoir un ensemble de règles qui peuvent être suivies, et qui peuvent être incorporées dans un ensemble de normes.

Répondre

23

Je réfuterais ceci à ceci. Je trouve plus de 3 méthodes enchaînées mal à l'aise sur l'oeil

 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

J'aime cela, car il reflète mon approche de regex - ayant un uber-regex est souvent moins compréhensible que 2-3 petits plus petits –

+3

C'est beaucoup mieux. Juste parce que vous pouvez * chaîne * ne signifie pas que vous * devriez *. –

+1

Je me suis toujours demandé à ce sujet, je dois avouer. Mon énervement avec cette approche est que vous mettez en cache une variable qui est déjà mise en cache (sur la chaîne). Étant donné que certains pourraient être assez importants, ne vaut-il pas mieux enchaîner, ou s'agit-il d'un surcoût acceptable? –

4

Que diriez-vous:

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

je trouve que enchaînant, lorsqu'il est utilisé dans la modération , peut conduire à une meilleure lisibilité.

2

Ne pas trop enchaîner.

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

Moins de chaînage, mais il semble plus facile à lire.

13

J'indentent comme si elle était placée entre crochets:

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

Je perds le fait que quelque chose est en train d'être ajouté à la table des matières ici. – redsquare

+1

vous pourriez diviser et ajouter un niveau supplémentaire d'indentation sur la ligne 2 là – nickf

Questions connexes