Ich habe die folgenden Arbeitscode, die Knockout verwendet, um festzustellen, welche Farbe einen Staat in der Präsidentschaftswahl 2012 zu machen. Wenn der Statuswert 1 (Republikaner) ist, lautet die Farbe rot. Wenn der Statuswert 2 (Demokrat) ist, lautet die Farbe blau. Wenn der Statuswert 3 (Toss Up) ist, lautet die Farbe gelb.Knockout CSS-Datenbindung mit einer Funktion?
<div class="el-clickable" data-bind="css: {
'el-republican': model.ny()===ip.constants.electoralStatusValue.republican,
'el-democrat': model.ny()===ip.constants.electoralStatusValue.democrat,
'el-tossup': model.ny()===ip.constants.electoralStatusValue.tossUp
}"
state-abbrev="ny" style="top:26px;left:442px;height:102px;width:54px;" title="New York">
<div style="margin-top:46px;">NY</div></div>
<div class="el-clickable" data-bind="css: {
'el-republican': model.pa()===ip.constants.electoralStatusValue.republican,
'el-democrat': model.pa()===ip.constants.electoralStatusValue.democrat,
'el-tossup': model.pa()===ip.constants.electoralStatusValue.tossUp
}"
state-abbrev="pa" style="top:107px;left:372px;height:65px;width:65px;" title="Pennsylvania">
<div style="margin-top:23px;">PA</div></div>
Das Problem ist, dass dies wie eine solche Brute-Force-Ansatz für das Problem scheint, da ich 3 separate CSS-Bindung Anrufe haben, um benötigen einen einzelnen CSS-Selektor zu holen. Das heißt, ich muss nach Republikanern, Demokraten und Tossup für jeden Staat auf meiner Wahl-College-Karte suchen.
(Die realen Szenario ist noch schlimmer als ich eigentlich für republikanische überprüfen, stützte sich Republikaner, Demokrat, lehnt demokrat, unschlüssig, tossup und gesperrt!)
http://www.ipredikt.com/contests/election2012
Was ich wirklich will, ist eine Möglichkeit, dies zu erreichen, indem eine Nutzenfunktion und vorbei in dem Zustandswert, wie dieser Aufruf:
data-bind="css: getStateColor(model.pa())" // for Pennsylvania
Ist das machbar mit dem ‚attr‘ verbindlich?
Ich habe mich oft, dass die CSS-Mechanismus verbindlich von: 'string-literal', true | false sehr restriktiv. Ich wünsche Knockout unterstützt auch etwas wie:
data-bind="css: myFunction(myParam)"
Super Antwort! Habe bis heute keine Chance bekommen zu antworten. Habe diesen Fix über das Wochenende implementiert und ich konnte nicht glauben, wie viel schneller mein Wahl-Widget 2012 wurde! Hier ist ein Link zu einer Partner-Site mit unserem Knockout-basierten Widget - vor dieser Änderung betrug die Lade-Latenz mehr als 2 Sekunden. Jetzt ist es deutlich schneller, fast so schnell wie die Host-Seite. Danke für diese ausgezeichnete Lösung. Kann nicht auf 2.2 warten, aber bis dahin ist diese einmalige Lösung perfekt. Zwei Daumen hoch! http://mynorthwest.com/category/electoral_map –
2.2 wurde heute Morgen veröffentlicht. Sieht nach einem tollen Widget aus. –