2009-08-17 3 views
16

diesen folgenden Beispielcode gegeben, die eine Tabellenzeile klont, wird einige Eigenschaften und fügt sie dann an einen Tisch:Gibt es eine bevorzugte Möglichkeit zum Formatieren von jQuery-Ketten, um sie lesbarer zu machen?

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

Hat jemand irgendwelche Vorschläge, wie dies könnte einfacher zu sein, auf dem Auge formatiert werden? Gibt es eine akzeptierte Konvention dafür?

Es wäre nützlich, eine Reihe von Regeln zu haben, die befolgt werden können und die in eine Reihe von Standards aufgenommen werden können.

Antwort

23

Ich würde dies umgestalten. Ich finde, mehr als 3 gekettet Methoden unruhig auf dem Auge

 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

Ich mag das, weil es meinen Ansatz zu regex Spiegel - einen uber-regex mit ist oft weniger verständlich als 2-3 kleinere mundgerechte –

+3

Das ist viel besser. Nur weil du * Kette * ketten kannst, bedeutet das nicht, dass du * solltest *. –

+1

Ich habe mich immer darüber gewundert, ich muss gestehen. Meine Nervosität bei diesem Ansatz besteht darin, dass Sie eine Variable zwischenspeichern, die bereits zwischengespeichert ist (auf dem Kettenstapel). Angesichts der Tatsache, dass einige sehr groß sein können, ist es nicht besser zu verketten, oder ist das ein akzeptabler Overhead? –

4

Wie wäre:

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

Ich finde, dass Chaining, wenn in Maßen verwendet werden, um eine bessere Lesbarkeit führen kann.

2

Kette nicht so viel.

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

Weniger Verkettung, aber es scheint einfacher zu lesen imo.

13

ich einrücken, als ob es eingeklammert wurde:

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

Ich verliere die Tatsache, dass hier etwas an Fundtable angehängt wird. – redsquare

+1

können Sie teilen und eine zusätzliche Ebene der Einrückung in Zeile 2 dort hinzufügen – nickf

Verwandte Themen