2017-01-01 12 views
1

私はEJSでループを持っていると私は私のデータに基づいてCSSを設定したい:EJS条件文の変更CSS

<% dummies.forEach(function(dummy) { %> 
    <div class="panel panel-???"> 
    </div> 
<% }) %> 

私のデータ:

var dummies = [{ 
    type: "funny", 
    sure: "Yes" // this should generate panel-success 
}, { 
    type: "funny", // this should generate panel-a 
    sure: "No" 
}, { 
    type: "happy", // this should generate panel-b 
    sure: "No", 
}]; 

のでsure属性がYesある時はいつでも、それが生成panel-success。それ以外の場合は、type属性に基づいてCSSを生成します。

助けてください。

答えて

3

まず、このようなオブジェクトの作成:だけのことができます...

<% dummies.forEach(function(dummy) { %> 
    <div class="panel panel- 
     <% if (dummy.sure==="yes") { %> 
     success 
     <% else %> 
     <%= dummy.type %> 
     > 
    </div> 
    <% }) %> 

<% dummies.forEach(function(dummy) { %> 
    <div class="panel panel-<%= cssClass[dummy.type][dummy.sure] %>"> 
    </div> 
<% }) %> 
+0

うまくいく、ありがとう!しかし、この方法では、私はこれらの2つの属性のすべての可能性を列挙しなければなりません(タイプと確信)。実際には「確実」が「はい」の場合は、「タイプ」の値にかかわらず常にパネルで成功しているので、それを短くすることが可能かどうか疑問に思っています... – shihandrana

+1

確かに===「はい」パネル-type = "成功" – Shazam

1

このコードを使用してみてください:

<% 
let cssClass = { 
    funny: { 
     Yes: "success", 
     No: "a" 
    }, 
    happy: { 
     No: "b" 
    } 
} 
%> 

次に、あなたのテンプレートでちょうど出力値がなければならないがあなたのロジックをEJSオペレータの中に包みます。それはちょっと乱雑に見えますが、それはそれです。サーバー側の設定に応じて、クライアント側でロジックを実行する代わりに、サーバー側からパラメータを渡すこともできます。

最善の方法は、データベースへのトリップやその他のロジックが実行されている限り、どこで重労働が行われるかによって異なります。