Knockout Mapping Observable没有被“观察”?

时间:2013-03-24 20:41:11

标签: javascript mvvm knockout.js

这是我的小提琴:

http://jsfiddle.net/PTSkR/8/

如果点击文字,我正试图让副边可编辑。我在淘汰赛网站上关注这个例子:

视图:

<p>
    Name: 
    <b data-bind="visible: !editing(), text: name, click: edit">&nbsp;</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"));

http://knockoutjs.com/documentation/hasfocus-binding.html

当我点击“侧面”的文本时,我点击“编辑”功能,但div的可见性不会改变。我认为这是一个范围问题,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

问题是hasfocus绑定也与editable可观察量相关联。删除此绑定会导致可见性更新得很好。我猜这意味着Knockout正试图设置焦点并失败,从而将editable设置为假。

也许不是使用该绑定,而是可以将blur事件处理程序附加到输入,而是将editable设置为false的处理程序。