2013-03-02 1 views
7

sto ottenendo un testo stile strano con questo codice:Knockout vincolante css rende => class =" 0 1 2 3 4 5 6 con KO 2.0

self.styleClass = ko.computed(function() { 
      return self.isFollowing() ? "button" : "secondary button"; 
     }); 

     <button data-bind="text: followButtonText,click: toggleIsFollowing, css: styleClass"></button> 

rende:

<button data-bind="text: followButtonText,click: toggleIsFollowing, css: styleClass" class=" 0 1 2 3 4 5 6 7 8 9 10 11 12">Unfollow</button> 

model.styleClass() rende bene nella console

+0

io non sono in grado di repro il problema: http://jsfiddle.net/s86Nb/1/il tuo codice dovrebbe funzionare correttamente. Quale browser e quale versione di KO stai usando? – nemesv

+0

@nemesv knockout-2.0.0.debug.js chrome e FF – FutuToad

risposta

11

la semantica del css legame è stato modificato da KO 2.1.0 a 2.2.0 KO

Da Knockout 2.2.0 released:

Abbiamo anche fatto alcune caratteristiche funzionano più come si potrebbe sempre avere pensano che dovrebbero funzionare. Ad esempio, il bind css ora può allegare elementi di classe CSS generati a livello di programmazione agli elementi (in precedenza, lo era limitato alla commutazione di nomi di classi CSS predefiniti).

Quindi l'aggiornamento alla 2.2.1 KO e funzionerà bene.

Se non è possibile eseguire l'aggiornamento è possibile utilizzare il attr vincolanti di una soluzione:

<button data-bind="text: followButtonText, 
        click: toggleIsFollowing, 
        attr:{ class: styleClass}" /> 

Demo JSFiddle using KO 2.0.0 and attr binding

+0

1 ° compagno di classe !! – FutuToad

+3

Solo un avviso: alcune versioni di IE non amano 'class' come nome di una proprietà. Ti consiglio di racchiuderlo tra virgolette (''class': styleClass'') in modo che IE non possa strozzarsi. –