2016-06-13 3 views
0

私のdbからフォーマット(YYYY-MM-DDTHH:mm:ss.000)で読み込まれる日付時刻変数「whenDateTime」があります。 私はこの日付時刻を持つdatetimepickerを設定し、それを操作して、それを私のdbに書き戻したいと思っています。Firefoxでknockoutを使ってbootstrap-datetimepickerを動作させる方法

何らかの理由により、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); 
     } 
    } 
}; 

フィドル:私はフィドル(https://jsfiddle.net/9aLvd3uw/237/)を実行するとhttp://jsfiddle.net/AsleG/v54hnxur/

+1

あなたのjsfiddleのコンソールにエラーがあります –

+0

私はそれらを見ていますが、原因を見ることはできません。 –

+1

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

答えて

1

、それは実際に09/04/2016 7:24 PMを示し2016-04-09T19:24:48.000の場合、入力日を変更すると正しく変更されます。私はあなたが言ったことを複製することができませんでした。

メモdate.jsは、日付が定義されていないか、間違った形式で提供されている場合、日付を解析する必要がある場合は常に、現在の日付を表示します。

+0

私はそれもうまく動作しますが、Cromeだけで動作します。 Safari(Macの両方のWindows)とFirefoxはどちらも入力を初期化しません。 –

+1

'FireFox'と' Safari'の日付パーサーは 'DD:MM:YYY'フォーマットを認識できません。 Firefoxの動作はChromeよりも厳密に見えます。たとえば、 'moment.js'がサポートされている場合は 'MM-DD-YYYY HH:mm'または' MM/DD/YYYY HH:mm'にフォーマットを変更し、FF Safariで動作する場合はテストします。 https://jsfiddle.net/9aLvd3uw/240/ –

+0

また、// koDate =(typeof(koDate)!== 'object')という行をコメントアウトしていますか?新しい日付(koDate): ''; –

関連する問題