我遇到了将日期绑定到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);
关于我做错的任何想法?
感谢您的时间。
答案 0 :(得分:0)
在以下行中,如果条件语句中只有一个==
,请确保使用的是=
。
if(value.toString()[0] ==“/”)
答案 1 :(得分:0)
我怀疑它与你绑定它的方式有关。当你执行profile.Birthdate()时,你传递的是实际值而不是可观察值。所以请尝试更改
<input data-bind="datepicker: profile.Birthdate()" />
要
<input data-bind="datepicker: profile.Birthdate" />