knockoutjs databind与jquery-ui datepicker

前端之家收集整理的这篇文章主要介绍了knockoutjs databind与jquery-ui datepicker前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用一个 jQuery UI日期。它后面的HTML输入字段目前被连接到 KnockoutJS作为dependentObservable,但是当它的值设置在viewmodel中时,datepicker失去它的格式。

我应该怎么做,不丢失格式?我想viewmodel不知道它是一个jQuery日期选择器。

解决方法

您可以编写一个自定义绑定,使用datepicker API在字段中设置日期,并通过正确读取日期来设置observable的值。

自定义绑定可能如下所示:

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);   
        }
    }
};

你会使用它像:

<input data-bind="datepicker: myDate,datepickerOptions: { minDate: new Date() }" />

datepickeroptions是可选的,可以包括任何你想传递到datepicker()调用

此外,这假设您正在使用可见的日期。如果你想做一个非可观察的单向绑定,绑定必须多做一些工作,但这是不可能的。

示例:http://jsfiddle.net/rniemeyer/NAgNV/

猜你在找的jQuery相关文章