日期选择器更改事件抛出”;TypeError:字符串不是函数;

Datepicker change event throwing "TypeError: string is not a function"

本文关键字:TypeError 字符串 函数 选择器 事件 日期      更新时间:2023-09-26

我正在尝试将KnockoutJS与jQuery UI一起使用。我有一个附带了日期选择器的input元素。我使用的是Knockout-3-2-0.js。每次更新日期选择器时,它绑定的变量只会抛出以下异常。

未捕获的类型错误:字符串不是函数

我已经检查了变量,并且传递的数据是字符串值。

ko.bindingHandlers.datepicker = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        var $el = $(element);
        //initialize datepicker with some optional options
        var options = allBindingsAccessor().datepickerOptions || {};
        $el.datepicker(options);
        //handle the field changing
        ko.utils.registerEventHandler(element, "change", function() {
            var observable = valueAccessor();
            observable($el.datepicker("getDate"));
        });
        //handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            $el.datepicker("destroy");
        });
    },
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            $el = $(element),
            current = $el.datepicker("getDate");
        if (value - current !== 0) {
            $el.datepicker("setDate", value);   
        }
    }
};

我的猜测是,您在html中提供了一个字符串作为绑定的值访问器,因此如下所示:

<input data-bind="datepicker: '2015-05-10'" />

在抛出错误的地方,将值访问器分配给observable变量,然后尝试将其作为函数调用。我相信您想对视图模型做的是提供一个可观察的作为绑定的值访问器,如下所示:

<input data-bind="datepicker: myObservableDate" />

我快速地拨弄了一下:http://jsfiddle.net/npbee/s4mmfada/