2016-08-18 2 views
0

Ich habe eine Liste von Elementen, die Kontrollkästchen für eine Einstellungsseite sind. Diese werden in einem const items wie so gespeichert:Anwenden eines CSS-Stils auf ein zugeordnetes Objekt

const ITEMS = [ 
    ["youtube", "YouTube"], 
    ["videos", "Videos"], 
    ["facebook", "Facebook"], 
    ["settings", "Settings"], 
] 

und zur Zeit, diese vier Elemente sind nur als Listenelemente aufgeführt. Was ich jetzt habe, ist dies:

enter image description here

aber, was ich will, ist dies:

enter image description here

Ich dachte an einen Scheck Anwendung zu sehen, ob die Unterkategorie zu, dass gehört Übergeordnete Kategorie und wenden Sie eine Art von Einzug auf die Unterkategorien an. Ist das möglich über eine map (wie ich durch dieses Array iterieren)? Oder gibt es einen klügeren und effizienteren Weg, dieses Problem zu lösen?

Hier ist, wie ich meine Kontrollkästchen machen:

item: function(i) { 
    return (
     <div className="checkbox"> 
      <label> 
       <input type="checkbox" checked={this.state.items[i[0]]}/> 
       {i[1]} 
      </label> 
     </div> 
    ) 
} 

render: function() { 
    return (
     <div className="col-sm-12"> 
      {_(ITEMS).map(this.item, this)} 
     </div> 
    ) 
} 
+1

Können Sie einige Code schreiben, wie Sie die Ankreuzfelder generieren? Und ich frage mich, warum Sie Sub-Arrays als Elemente in einem Array verwenden ...? –

+0

Ich habe ein Array innerhalb eines Arrays verwendet, um auf den Wert "youtube", "videos" usw. zuzugreifen, wenn es aktiviert ist und "YouTube" auf der Site korrekt angezeigt wird. Sollte ich stattdessen zu einem Objekt wechseln, das jedes Array enthält? – patrickhuang94

Antwort

1

Ich würde Ihnen empfehlen, zu verwenden, Objekte in einem Array. So können Sie jedem Objekt mehr als nur eine Eigenschaft zuweisen. Für den Zugriff nur mit normalem Javascript würde ich einen for -Loop wegen seiner Kompatibilität mit älteren Browsern verwenden. Ein Beispiel, das ich gemacht, sind hier zu finden:

https://jsfiddle.net/morrisjdev/vjb0qukb/

+0

Die Geige, speziell die 'var items' Struktur, hat mir sehr geholfen. – patrickhuang94

1

Mit etwas 'schmutzigen' Code, könnten Sie verwenden: https://jsfiddle.net/1sw1uhan/

const ITEMS = [ 
 
    ["youtube", "YouTube"], 
 
    ["videos", "Videos"], 
 
    ["facebook", "Facebook"], 
 
    ["settings", "Settings"], 
 
] 
 

 
var list = $('<ul>'); 
 
$.each(ITEMS, function(index, value) { 
 
\t if ((index+1)%2 == 0 && index != 0){ 
 
\t \t var sublist = $('<ul>').append($('<li>').text(value[1]).attr('id', value[0])); 
 
\t } else { 
 
\t \t var sublist = $('<li>').text(value[1]).attr('id', value[0]); 
 
\t } 
 
\t list.append(sublist); 
 
}) 
 
$('#somediv').append(list);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="somediv"> 
 

 
</div>

+0

Gibt es eine andere Lösung, die jQuery nicht einbezieht? Das erscheint mir etwas zu unordentlich, aber ich weiß die Antwort zu schätzen. – patrickhuang94

+0

Haben Sie jedes Mal vier Einträge oder ist die Liste dynamisch? –

+0

Es wird eine statische Liste von ITEMS sein, so sollte es einfacher sein, damit umzugehen. – patrickhuang94

Verwandte Themen