2012-08-30 48 views
2

我參考jQuery UI datepicker change event not caught by KnockoutJS使datetimepicker與淘汰賽一起工作。所以我基本上取代datepickerdatetimepicker使下面的代碼jquery ui datetimepicker不與淘汰賽

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

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

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

    }, 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 

     //handle date data coming via json from Microsoft 
     if (String(value).indexOf('/Date(') == 0) { 
      value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1"))); 
     } 

     current = $(element).datetimepicker("getDate"); 

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

和HTML:

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

隨着代碼,它看起來像工作,但它未能更新變成相應的淘汰賽觀察到哪些用戶。

我調試的代碼,並發現

  1. datetimepicker("getDate")給人以00:00僅日期部分。
  2. observable($(element).datetimepicker("getDate"));有時會拋出異常,因爲observable(x)有時不存在。

有沒有人解決這個問題?

更新:通過捕獲偶爾的異常來解決#2問題。

+2

您可能希望使用最新的jQuery UI的版本試試。我看到了與更新到最新的jQuery/jQuery UI的小提琴相同的行爲。 http://jsfiddle.net/rniemeyer/MWHNg/ –

+0

@RPNiemeyer非常感謝。這是我需要的信息。如果你不介意,你可以回答,以便我可以接受。再次感謝。 –

回答

1

您可能想嘗試使用最新版本的jQuery UI。我看到了與更新到最新的jQuery/jQuery UI的小提琴相同的行爲。

下面是最新位小提琴:http://jsfiddle.net/rniemeyer/MWHNg