【问题标题】:Datepicker change event throwing "TypeError: string is not a function"Datepicker 更改事件抛出“TypeError:字符串不是函数”
【发布时间】:2015-05-25 12:36:54
【问题描述】:

我正在尝试将 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);   
        }
    }
};

【问题讨论】:

  • ko.utils.registerEventHandler(element, "change", function() { var observable = valueAccessor(); observable($el.datepicker("getDate")); }); observable($el.datepicker("getDate"));抛出异常

标签: javascript jquery jquery-ui knockout.js datepicker


【解决方案1】:

我的猜测是您提供了一个字符串作为 html 中绑定的值访问器,所以是这样的:

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

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

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

我整理了一个快速的小提琴:http://jsfiddle.net/npbee/s4mmfada/

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2020-05-03
    • 1970-01-01
    • 2013-08-25
    • 2017-07-05
    相关资源
    最近更新 更多