KnockoutJS日期绑定问题,使用jQuery datepicker

时间:2012-03-04 05:06:16

标签: asp.net asp.net-mvc-3 jquery-ui knockout.js jquery-ui-datepicker

我遇到了将日期绑定到viewmodel上的对象的问题。我有一个从服务器上获取的日期。

 var viewModel = {
    profile : ko.mapping.fromJS(initialData),

我将属性绑定到文本框。

<input data-bind="datepicker: profile.Birthdate()" />

我正在使用我在此处找到的自定义绑定:http://jsfiddle.net/rniemeyer/NAgNV/

    ko.bindingHandlers.datepicker = { 
init: function(element, valueAccessor, allBindingsAccessor) { 
    //initialize datepicker with some optional options 
    var options = allBindingsAccessor().datepickerOptions || {}; 
    $(element).datepicker(options); 

    //handle the field changing 
    ko.utils.registerEventHandler(element, "change", function () { 
        var observable = valueAccessor(); 
        ko.observable($(element).datepicker("getDate")); 
        $(element).blur();
    }); 

    //handle disposal (if KO removes by the template binding) 
    ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
        $(element).datepicker("destroy"); 
    }); 

}, 
update: function(element, valueAccessor) { 
    var value = ko.utils.unwrapObservable(valueAccessor()), 
        current = $(element).datepicker("getDate"); 

    if(value != null)
    {
        if(value.toString()[0] = "/")
            value = new Date(parseInt(value.toString().substr(6)));
    } 

    if (value - current !== 0) { 
        $(element).datepicker("setDate", value); 
    }
} 

};

我添加了 if(value.toString()[0] =“/”),用于格式化文本框中显示的日期。

这似乎很有效,除非我尝试保存对象添加发送回服务器。我添加了一个警报以进行验证,在将对象发送到服务器之前,日期没有变化。

 save : function(){
        alert(this.profile.Birthdate);

关于我做错的任何想法?

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

在以下行中,如果条件语句中只有一个==,请确保使用的是=

if(value.toString()[0] ==“/”)

答案 1 :(得分:0)

我怀疑它与你绑定它的方式有关。当你执行profile.Birthdate()时,你传递的是实际值而不是可观察值。所以请尝试更改

<input data-bind="datepicker: profile.Birthdate()" />

<input data-bind="datepicker: profile.Birthdate" />