Изменение класса css в knockout.js при щелчке мыши
Документация knockout.js показывает привязку css следующим образом:
<div data-bind="css: { profitWarning: currentProfit() < 0 }">
Profit Information
</div>
Мне нужно адаптировать его, чтобы изменить класс css на mouseclick. Как я могу это сделать?
Основываясь на ответах ниже, я использую следующий код:
// CSS class to be applied
<style>
.bigclass
{
width: 200px;
}
</style>
// Select list inside a jquery .tmpl
<script id='criteriaRowTemplate' type='text/html'>
<tr>
<td>
<select data-bind='click: makeBig, css: {bigclass : SelectHasFocus() > 0}' />
</td>
</tr>
</script>
// Knockout.js Viewmodel
var CriteriaLine = function() {
this.SearchCriterion = ko.observable();
this.SelectHasFocus = ko.observable(0);
// this method is called
makeBig = function(element) {
this.SelectHasFocus(1);
};
};
Однако это не расширяет ширину списка выбора. Что я делаю неправильно?
Ответы
Ответ 1
Попросите функцию click изменить наблюдаемую переменную. Для пример:
<div data-bind="css: { myclass: newClass() == true }">
Profit Information
</div>
<button data-bind="click: changeClass">Change Class</button>
<script type="text/javascript">
var viewModel = {
newClass: ko.observable(false),
changeClass: function() {
viewModel.newClass(true);
}
};
</script>
Примечание. Вы можете комбинировать click
и css
с одним и тем же элементом. Например:
<div databind="click: changeClass, css: { myclass: newClass() == true }"></div>
Ответ 2
Самый простой способ - использовать привязку привязки которая изменяет наблюдаемый в обратном вызове. Вы бы привязали класс соответствующим образом, используя привязку attr
Ответ 3
Я чувствую, что проблема связана с тегом script.
Решение можно найти по следующей ссылке: http://jsfiddle.net/ZmU6g/3/