我很难从official documentation for the hasFocus binding执行此示例
查看方式:
<p>
Name:
<b data-bind="visible: !editing(), text: name, click: edit"> </b>
<input data-bind="visible: editing, value: name, hasFocus: editing" />
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>
视图模型:
function PersonViewModel(name) {
// Data
this.name = ko.observable(name);
this.editing = ko.observable(false);
// Behaviors
this.edit = function() { this.editing(true) }
}
ko.applyBindings(new PersonViewModel("Bert Bertington"));
我的困惑来自于“编辑”可观察对象,它没有被声明为函数,但在视图中被调用时就像是一个具有!editing()
的函数,而不是一个具有visible: editing
和hasFocus: editing
的函数。
我已经阅读了www.example.com上的文档knockoutjs.com但是不知道从视图中引用可观察对象的规则是什么。如果我有一个可观察的foo,我什么时候在视图中引用它作为foo(),什么时候引用它作为foo?
1条答案
按热度按时间nlejzf6q1#
有一个简单的解释:* 所有可观察的都是函数 *。所以,在这个例子中,
editing
实际上是一个函数。你必须调用(或者用KO术语“unwrap”)它来得到它的当前值,这就是为什么你要加括号的原因。当您将一个可观察对象传递到一个默认绑定中时,该绑定实际上会为您执行这种展开(例如,可见绑定的source)。但是,当你 * 求反 * 一个可观察值并想使用它时,就像你对
!editing()
所做的那样,你需要首先调用它来得到它的值。!editing
的结果总是false
。因为editing
是一个函数,其计算结果总是true
。而!editing()
的结果是editing
的当前值的求反版本。