Knockout.js 更新程序填充输入的敲除绑定?

Knockout.js 更新程序填充输入的敲除绑定?,knockout.js,Knockout.js,我正在使用一个日期选择器,每当我从日历中选择日期时,它就会将一些文本推送到输入中 我还有其他一些输入实例是通过第三方工具填充的 问题是,在重新绑定之前,我必须在输入填充之后按一些键。如果我不这样做,那么可观察对象就不会更新 类似问题: 有没有办法手动重新绑定元素,这样当我按下“保存”键时,这些可观察对象可以被准确绑定?一般来说,您需要创建一个自定义绑定,该绑定使用小部件提供的任何通知API(尽管首先检查是否有其他人还没有创建)。这其实相当容易;KokOutt的创作者认为编写自定义绑定是使用敲除的

我正在使用一个日期选择器,每当我从日历中选择日期时,它就会将一些文本推送到输入中

我还有其他一些输入实例是通过第三方工具填充的

问题是,在重新绑定之前,我必须在输入填充之后按一些键。如果我不这样做,那么可观察对象就不会更新

类似问题:


有没有办法手动重新绑定元素,这样当我按下“保存”键时,这些可观察对象可以被准确绑定?

一般来说,您需要创建一个自定义绑定,该绑定使用小部件提供的任何通知API(尽管首先检查是否有其他人还没有创建)。这其实相当容易;KokOutt的创作者认为编写自定义绑定是使用敲除的常规方面(就像角的创作者认为编写自己的指令是使用它的常规方面)。具体细节取决于特定的小部件


之所以需要这样做,是因为Knockout对输入元素的本机绑定会侦听浏览器事件,如
change
keypress
。但是,当输入元素以编程方式更改时,浏览器不会自动发出事件,因此绑定不知道发生了什么。

作为@ebohlman的一个例子

ko.bindingHandlers.datepicker = {
    init: function (element, valueAccessor) {
        var $el = $(element), value = valueAccessor;
        $el.datepicker({ 
            value: ko.unwrap(value),
            onChange: function(newValue){
                if (ko.isObservable(value)) {
                    value(newValue);
                }
            }
        });

        if (ko.isSubscribable(value)){
            value.subscribe(function(){
                $el.datepicker("set value", ko.unwrap(value));
            });
        }
    }
}

(这是使用语义UI的模块模式,插件的API可能会有所不同)

日期选择器如何更新输入元素?datepicker元素是否绑定到一个敲除对象?你能发布一些代码吗???谢谢。@VinneyKelly这里有一个例子:这是使用pagedown,但是日期选择器遇到了同样的问题。如果你点击任何一个菜单按钮来改变文本,在你手动输入一些内容之前,observable不会更新。我只是返回post来提交这篇文章(嗯,不完全是……那太可怕了)。KO+bindingHandlers+templates=UI Ninjutsu!