knockout js变量设置类似于调用函数

时间:2016-05-11 09:14:35

标签: javascript jquery object knockout.js

我有一个名为enable的变量,我以这种方式分配:

var enable = ko.observable();

在方法中,我将其值设置为:

enable(false);

如果我这样做

enable = false;

然后,如果我在控制台中看到启用的值,则不会设置该值。这是什么原因?

1 个答案:

答案 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>