knockout.js更改hasfocus值不会更新绑定值

Oli*_*eng 2 knockout.js

我有http://jsfiddle.net/ksCSn/1/

HTML

<input type="text" data-bind="                                                                             
value: title,
hasfocus: edit,
onEnter: stopEdit" />

<p data-bind="text: title"></p>
Run Code Online (Sandbox Code Playgroud)

JS

ko.bindingHandlers.onEnter = {
    init: function(element, valueAccessor, _, viewModel) {
        ko.utils.registerEventHandler(element, 'keydown', function(evt) {
            if (evt.keyCode === 13)
                valueAccessor().call(viewModel);
        });
    }
}

function ViewModel() {
    this.title = ko.observable("default value");
    this.edit = ko.observable(false);
    this.stopEdit = function() {
        this.edit(false);

        // If the edit update is in a timeout, then it works
        // var edit = this.edit;
        // setTimeout(function() { edit(false); }, 0);
    };
}

ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)

为什么在输入字段中编辑时按Enter键,值不会更新?

如果我更改编辑更新以使其排队等待超时,那么它可以工作.这是为什么?

Mic*_*est 8

这是因为Knockout中的"bug"(请参阅https://github.com/SteveSanderson/knockout/issues/321)导致所有绑定一起更新.当您更改edit属性时,它会更新hasfocus绑定以模糊字段,并且由于该错误,value也会更新绑定.由于绑定按列出的顺序运行,因此value首先更新绑定,这将使用title视图模型中的值覆盖该字段.

修复此问题的一个简单更改是重新排序绑定,以便hasfocus首先运行:http://jsfiddle.net/mbest/ksCSn/8/