2013-02-28 78 views
0

我是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

回答

1

望着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