我有一个名为enable的变量,我以这种方式分配:
var enable = ko.observable();
在方法中,我将其值设置为:
enable(false);
如果我这样做
enable = false;
然后,如果我在控制台中看到启用的值,则不会设置该值。这是什么原因?
答案 0 :(得分:1)
knockout observables是函数,因此您可以通过在期望值上调用它们来设置它们的值:
myObservable(myValue);
以下引用解释了这一点:
“并非所有浏览器都支持JavaScript getter和setter(* cough * IE * cough *),所以为了兼容性,ko.observable对象实际上是函数。“
如果直接将它们设置为值,则覆盖它们并且它们不再是可观察的,这会破坏所有内容。
看看这个小提琴:
var myVM = (function() {
var showobservable1 = ko.observable(true);
var showobservable2 = ko.observable(true);
return {
show1: showobservable1,
show2: showobservable2,
ok: function() {
showobservable1(!showobservable1());
},
broken: function() {
showobservable2 = !showobservable2;
}
}
}());
ko.applyBindings(myVM);
div {
width: 100px;
height: 40px;
margin-top: 10px;
background-color: yellow;
text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="1" data-bind="visible: show1">1</div>
<div id="2" data-bind="visible: show2">2</div>
<div id="ok" data-bind="click: ok">works</div>
<div id="broken" data-bind="click: broken">break</div>