【问题标题】:JqueryUI datepicker overwriting existing date value with current date - KnockoutJSJqueryUI datepicker用当前日期覆盖现有日期值 - KnockoutJS
【发布时间】:2016-08-23 18:03:10
【问题描述】:

我在 jqueryUI 对话框中有一个表单,其中包含从 KnockoutJS observableArray 填充的日期列表。

<tbody data-bind="foreach: $root.selectedListOfDates">
<tr><td><input type="text" data-bind="datepicker: DueDate" /></td></tr>
</tbody

我的问题是,当我加载一个包含日期列表的新对象时,输入框中日期的原始值会被当前日期覆盖(我假设加载 Jquery 日期选择器时)。

这是我的日期选择器绑定:

ko.bindingHandlers.datepicker = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        var options = allBindingsAccessor().datepickerOptions || {},
            $el = $(element);

        //initialize datepicker with some optional options
        $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);   
        }
    }
};

【问题讨论】:

    标签: jquery-ui knockout.js


    【解决方案1】:

    init 中的 options 变量是否包含 gotoCurrent: true?我相信 jQuery datepicker 默认会使用 new Date()。

    var options = options || {};
    options.goToCurrent = true;
    $el.datepicker(options);
    

    http://api.jqueryui.com/datepicker/

    【讨论】:

    • 我把它扔进去了,结果还是一样。
    • 您没有在 init 中初始化日期选择器。 $el.datapicker(选项); $el.datepicker("setDate", valueAccessor());
    • 它不喜欢它。 Uncaught TypeError: Unable to process binding "datepicker: function (){return DueDate }" Message: i.getTime is not a function
    • DueDate 是 javascript Date 对象还是字符串?
    • 我有点过头了,所以请原谅我的解释。我使用 Knockout 映射器来映射从 ASP MVC 控制器发送过来的对象数组。它似乎是一个 JS 日期:“/Date(1462507200000)/”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多