2012-08-30 23 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