2012-07-22 24 views
12

yo probamos este uno:¿Cómo puedo hacer un enlace condicional en knockout.js?

<div data-bind="attr: {class: itemSelected? 'selected' : 'unselected' }"></div> 

Pero esto no funciona :)

+1

¿Has probado con un espacio en blanco entre itemSelected y "?" attr: {class: itemSelected? 'selected': 'unselected'} –

+0

¿Tiene "whitespace" significado en knockout.js? – ozz

+0

Lo hace cuando separa el signo de interrogación de la variable. – Tyrsius

Respuesta

21

Asumiendo que tiene esto:

function viewModel() { 
    this.itemSelected = ko.observable(true); 
} 
ko.applyBindings(new viewModel());​ 

Añadir un() después itemSelected para obtener el valor actual de la observable que puede usar con el operador ternario:

<div data-bind="attr: { class: itemSelected() ? 'selected' : 'unselected' }"></div>​

http://jsfiddle.net/RK7Ty/


Si no necesita asignar la clase seleccionada para el estado seleccionado no se puede hacer esto en su lugar:

<div data-bind="css: { selected: itemSelected }"></div>​ 

http://jsfiddle.net/RK7Ty/1/

0

A continuación trabajó para mí, Estaba usando los atributos css e id, para mí no funcionó si el atributo css no es el primero, así que mantén el atributo css como tu primer puño.

<div class="panel-collapse collapse" data-bind="css:{in:$index()==0}, attr: { id:'collapse'+$index()} "> 

... 
... 
... 

</div> 
Cuestiones relacionadas