0
我在查找复选框时未清楚为什么我的模板中的背景色样式不更新时遇到一些问题。更改可观察性时,样式背景颜色属性未更新
在我div标签我有:
data-bind="style: {"backgroundColor": isChecked == true ? "#00796B" : "#999"}"
,我想要当复选框被选中或取消选中要改变我的div标签的背景色。现在背景颜色不会改变,但似乎我对输入标签的检查按预期工作。
function checkboxViewModel(params) {
var self = this;
self.isChecked = ko.observable(params.isChecked || false);
self.isDisabled = ko.observable(params.isDisabled || false);
}
ko.components.register('material-checkbox', {
viewModel: checkboxViewModel,
template:
'<div class="checkbox" data-bind="style: {"backgroundColor": isChecked == true ? "#00796B" : "#999"}>' +
'<input type="checkbox" id="checkbox" data-bind="css: {disabled: isDisabled}, checked: isChecked, disabled: isDisabled" />' +
'<label for="checkbox"></label>' +
'</div>'
});
ko.applyBindings();
.checkbox{
width: 20px;
height: 20px;
background-color: #999;
position: relative;
border-radius: 3px;
input{
visibility: hidden;
&:checked + label{
background-color: #00796B;
&:before{
opacity: 1;
}
}
}
input.disabled{
&:checked + label{
background-color: #999;
&:before{
opacity: 1;
}
}
}
label{
width: 16px;
height: 16px;
position: absolute;
top: 2px;
left: 2px;
background-color: white;
border-radius: inherit;
&:before{
content: "";
width: 12px;
height: 6px;
border: 2px solid white;
border-top: none;
border-right: none;
position: absolute;
-webkit-transform: rotate(-45deg); /* Chrome, Safari, Opera */
transform: rotate(-45deg);
top: 2px;
left: 1px;
opacity: 0;
}
}
}
<link href="checkbox.less" rel="stylesheet/less" type="text/css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script>
<material-checkbox params:"isChecked: false, isDisabled: false"></material-checkbox>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script>
<script src="checkbox.js"></script>
这个固定它太感谢你了!我确实有一个误会。我知道你必须调用变量作为一个函数,当它是一个可观察的,但为什么你不必输入标签?为什么没有data-bind =“checked:isChecked”必须作为函数被调用 – user2367327
@ user2367327这是因为Knockout会为你做* *。当绑定到observable本身时,它会“知道”将其作为函数调用。这对于双向绑定尤其重要,因为从视图模型到DOM的更新将按原样调用它,并且从DOM(例如用户点击)更新到视图模型时会使用新值调用“isChecked”。 – Jeroen