I know that in knockout has the ability to specify class from observable property, like this:
<div data-bind="css: Color " >
Knockout also provides the ability to specify conditional class rendering like this:
<div data-bind="css: { 'my-class' : SomeBooleanProperty }" >
But which markup should be specified if i need those features of knockout css binding together?
I tried this, but with no luck:
<div data-bind="css: { Color, 'my-class' : SomeBooleanProperty }" >
I have got the error:
Error: Unable to parse bindings. SyntaxError: Unexpected token ,;
I not found any example in google or in official docs.
UPDATE
I found a workaround: build up style string in code and put it to property, like this:
item.AdditionalCss(Color() + " " + (result.IsSortable() ? 'my-class' : null));
And specify this class in html:
data-bind="css: AdditionalCss "
But i little bit puzzled, i think it is dirty approach. I think it would be better to achieve the same result in markup. How can accomplish that with markup?
Multiple classes can be applied to a single element in HTML and they can be styled using CSS.
Yes, div can take as many classes as you need.
You can have more than one class for same element in any order. Order is important in . css file itself. Imagine, that all classes are added in one array and all keys (like width, height..) are overridden by any new entry by that key (reading file from top to bottom).
Use the class binding
<div data-bind="class: myClass" >
View model :
var vm = {
myClass : ko.observableArray(),
};
vm.myClass.push('class1');
vm.myClass.push('class2');
You can also use the class binding with a computed.
But if you don't want to use it, you can do that :
<div data-bind="attr: { 'class' :( Color() + (SomeBooleanProperty() ? ' my-class' :'')) }">
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With