2015-06-06 2 views
1

У меня есть Кордова плагиной глобализации, и я хочу использовать .dateToString изменить DateTimes, которые находятся в формате JSON объектовобъектов даты Изменения в массиве из jquery.getJSON с помощью cordova.globalization.stringToDate

incoming JSON = [{"alphaID":"JV033","status":"open","dateadded":1433531166},{"alphaID":"JV032","status":"on hold","dateadded":1433530583}] 

так это мой код

document.addEventListener("deviceready", getJSONList, false); 
var dateToDisplay = '' 

function getJSONList() { 
    $.getJSON("https://myserver.com/ajax_calls/list_sr_app.asp", function(e) { 
     e.forEach(function(arrayItem, index, thearray) { 
      var x = arrayItem.dateadded * 1000; //alert(new Date(x)); this works (un-adjusted dates of course) 
      //alert(displayDate(x)); this does NOT work - delivers undefined 
      thearray[index].arrayItem.dateadded = displayDate(x) // the assigment of the return of displayDate(x) does not work either 
     }); 
     constructJSONList(e); //this function (not here) works 
    }); 
} // end of getJSONList() 


function displayDate(d) { 
    navigator.globalization.dateToString(
     new Date(d), 
     function(date) { 
      dateToDisplay = date.value; /* alert(dateToDisplay); - this alert works*/ 
     }, 
     function() { 
      dateToDisplay = 'Error getting dateString' 
     }, { 
      formatLength: 'short', 
      selector: 'date and time' 
     } 
    ); 
    return dateToDisplay; 
} 

есть два вопроса:

  1. Как только я пытаюсь использовать date.value из сторона функции результатов, даже в переменной, становится «неопределенной», поэтому возвращает dateToDisplay; на самом деле не работает. При вызове функции, такой как alert(displayDate(1433531166000));, результат в поле предупреждения «неопределен», если только этот вызов не входит в функцию (как указано выше)
  2. Как заменить параметр объекта «dateadded» на новое значение - на данный момент я не могу вносить никаких изменений.

ответ

0

Вы добавили прослушиватель событий для «устройства готов», но похоже, что ваши вызовы для получения json (и отображения даты) не выполняются до того, как устройство действительно будет готово. Функции Cordova не будут работать (не будут определены), пока устройство не будет готово. Попробуйте этот слушатель событий:

document.addEventListener('deviceready', onDeviceReady.bind(this), false); 
function onDeviceReady() {     
    // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here. 
    getJSONList(); 
}; 

Это работает для меня, во всяком случае, и отладчик дает мне «неопределенный» за «глобализацию», если я слушатель события так, как вы сделали.

+0

Спасибо @quilkin, глобализация доступна, потому что я могу получить предупреждение от предупреждения (dateToDisplay); изнутри dateToDisplay() для каждой итерации цикла. На самом деле, моя проблема заключается в том, что я не могу получить доступ к date.value из-за пределов этой функции. Я решил задание к свойству объекта с: e.forEach (функция (Sr, I, рете) \t \t \t \t { \t \t \t \t \t вар х = е [I] .dateadded * 1000; \t \t \t \t \t е [I] .dateadded = х; \t \t \t \t}); это был просто вопрос доступа к правым частям объекта – Ultradiv

Смежные вопросы