2016-06-13 31 views
0

我有格式爲(YYYY-MM-DDTHH:mm:ss.000)的從我的數據庫讀取的日期時間變量「whenDateTime」。 我想設置一個datetimepicker與這個日期時間,然後能夠操縱它,當然寫回到我的分貝。如何使bootstrap-datetimepicker在Firefox上使用敲除工作

由於某些原因,datetimepicker不會觸發。我哪裏出錯了?

這是我的視圖模型:

function ViewModel() { 
    var self = this; 

    self.whenDateTime = ko.observable("2016-04-09T19:24:48.000"); 

    self.viewWhenDateTime = ko.computed({ 
     read: function() { 
      var mydate = self.whenDateTime(); 
      if (!mydate) { 
       return null; 
      } else { 
       return moment(mydate).format("DD.MM.YYYY HH:mm"); 
      } 
     }, 
     write: function (newVal) { 
      var reversed = moment(newVal).format(); 
      self.whenDateTime(reversed); 
     } 
    }); 
} 

的bindingHandlers是這樣的:

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

     //when a user changes the date, update the view model 
     ko.utils.registerEventHandler(element, "dp.change", function (event) { 
      var value = valueAccessor(); 
      if (ko.isObservable(value)) { 
       if (event.date != null && !(event.date instanceof Date)) { 
        value(event.date.toDate()); 
       } else { 
        value(event.date); 
       } 
      } 
     }); 

     ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
      var picker = $(element).data("DateTimePicker"); 
      if (picker) { 
       picker.destroy(); 
      } 
     }); 
    }, 
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
     var picker = $(element).data("DateTimePicker"); 
     //when the view model is updated, update the widget 
     if (picker) { 
      var koDate = ko.utils.unwrapObservable(valueAccessor()); 

      //in case return from server datetime i am get in this form for example /Date(93989393)/ then fomat this 
      koDate = (typeof (koDate) !== 'object') ? new Date(parseFloat(koDate.replace(/[^0-9]/g, ''))) : koDate; 

      picker.date(koDate); 
     } 
    } 
}; 

小提琴:http://jsfiddle.net/AsleG/v54hnxur/

+1

你的jsfiddle的控制檯有錯誤 –

+0

我看到了這些,但看不到是什麼造成了它們。 –

+1

https://jsfiddle.net/9aLvd3uw/236/ –

回答

1

當我運行小提琴(https://jsfiddle.net/9aLvd3uw/237/),它實際上表明09/04/2016 7:24 PM對於2016-04-09T19:24:48.000,當我更改輸入日期時,它會被正確更改。我無法複製你提到的內容。

注意,每當moment.js想要解析日期時,如果該日期未定義或提供的格式不正確,則會顯示當前日期。

+0

我也可以工作,但只能使用Crome。 Safari(Mac版Windows)和Firefox都不會初始化輸入。 –

+1

我猜'FireFox'和'Safari'上的日期解析器無法識別'DD:MM:YYY'格式。 Firefox的行爲看起來比Chrome更嚴格。例如,如果「moment.js」支持並測試它是否適用於FF Safari,則將格式更改爲「MM-DD-YYYY HH:mm」或「MM/DD/YYYY HH:mm」。 https://jsfiddle.net/9aLvd3uw/240/ –

+0

我還得到它與註釋掉行// koDate =(typeof(koDate)!=='object')?新日期(koDate):''; –

相關問題