Knockout自定义绑定的日期时间部分

问题描述:

我是Knockout的新手。我有一个像这样的Viewmodel:Knockout自定义绑定的日期时间部分

var Booking = function(data) { 
    var self = this; 

    self.BookingID = ko.observable(data.BookingID); 
    self.BookingCustomerOrderID = ko.observable(data.BookingCustomerOrderID); 
    self.BookingName = ko.observable(data.BookingName); 
    self.BookingTreatmentGroupID = ko.observable(data.BookingTreatmentGroupID); 
    self.BookingStartTime = ko.observable(data.BookingStratTime); 
    self.BookingEndTime = ko.observable(data.BookingEndTime); 

在我的表单中,我想让用户更改StartTime和EndTime的时间。我是否可以将自定义绑定到仅从输入字段离开日期部分的时间部分,并将此更新作为模型?

只显示这个值工作正常,但这不会更新viewmodel。

ko.bindingHandlers.timeVal = { 
    update: function (element, valueAccessor) { 
     var value = valueAccessor(); 
     var date = moment(value()); 
     var strDate = date.format('HH:mm'); 
     $(element).val(strDate); 
    } 
}; 
+0

请问你可以添加一个小提琴。 – nav0611 2013-02-28 13:42:53

+0

你可以试试self.BookingStartTime(strDate); **而不是** $(element).val(strDate); – nav0611 2013-02-28 13:44:25

+0

谢谢Boss,但如果可能的话,我仍然希望viewpart中的datepart。 – ekenman 2013-02-28 13:53:21

望着documentation,您可以将事件处理程序注册到您的init方法的元素,并用它来更新您观察到的。像这样的东西:

ko.bindingHandlers.hasFocus = { 
    init: function(element, valueAccessor) { 
     $(element).change(function() { 
      if(this.val() != valueAccessor()) 
      { 
       this.val(valueAccessor()); 
      } 
     });   
    }, 
    update: function(element, valueAccessor) { 
     var value = valueAccessor(); 
     var date = moment(value()); 
     var strDate = date.format('HH:mm'); 
     $(element).val(strDate); 
    } 
}; 
+0

哈哈!我完全错过了那部分。它拼出来不是它。谢谢保罗! – ekenman 2013-02-28 13:56:41

+0

轻松完成;去过也做过! – 2013-02-28 13:57:27