2017-06-09 86 views
0

我有存儲在我的數據庫中的日期,我想與日曆中的元素進行比較,以改變的日子背景顏色如何比較日期在全歷

{ 
    "success": true, 
    "disponibilidad": [ 
    { 
     "slot_date": "2017-06-08" 
    }, 
    { 
     "slot_date": "2017-06-09" 
    }, 
    { 
     "slot_date": "2017-06-10" 
    }, 
    { 
     "slot_date": "2017-06-11" 
    }, 
    { 
     "slot_date": "2017-06-12" 
    } 
    ] 
} 

我試圖使用jquery ,並且它以某種方式工作,但是加載時間太慢而且最優化太少,另外,如果我改變月份,顏色日期會出現問題,我的問題是,有沒有辦法傳遞該數組DayRender內的日期?

,我已經採用的方法

$('#calendar').fullCalendar({ 

    dayClick: function() { 

     //alert("dia presionado"); 
     selectedDate = $(this).attr("data-date"); 

     alert($(this).attr("data-date")); 
     //window.location.href="/reservation/"+selectedDate; 
     $('#calendar').fullCalendar('gotoDate', $(this).attr("data-date")); 
    }, 

    dayRender: function(date, cell) { 
     $.ajax({ 
      type: "get", 
      url: '/getFaq', 
      dataType: 'json', 
      success: function(data) { 
       var valores = []; 
       valores[0] = "2017-06-27"; 
       valores[1] = "2017-06-28"; 
       for (var i = 0; i <= 1; i++) { 
        if (date.format() == valores[i]) { 
         cell.css("background-color", "red"); 
        } 
       } 
      }, 
      error: function(response) {}, 
     }); 
}}) 

*編輯

我已經使用的數據屬性嵌入代碼,但是,由於某種原因,我不能的DayRender內使用變量,在dayclick如果它的工作原理

success: function(data) 
     { 
     myArray= new Array(data.disponibilidad.length); 
     for(var i=0;i<data.disponibilidad.length;i++) 
     { 

      myArray[i]=data.disponibilidad[i].slot_date; 
     } 

     $("body").data("array",myArray); 
     //for(var k=0; k< myArray.length;k++) 
     //console.log($("body").data("array")); 
     //console.log(myArray); 


     } 



$('#calendar_make_a_reservation').fullCalendar({ 
       height: 500, 
       dayClick: function() { 
        $('#modal_appointment_time').modal('open'); 
        /* 
        var array=$("body").data("array"); 
     console.log(array);*/ 
       }, 
       dayRender: function (date, cell) { 
           var array=$("body").data("array"); 
           console.log(array); 
      /* 
      myArray.forEach(function (item) { 
       if (date._d.getDate() == item.getDate() && date._d.getMonth() == item.getMonth()) 
       { 
        $(cell).toggleClass('selected'); 
       } 
      });*/} 

      }) 

在返回的DayRender我 「未定義」

+1

而不是重新加載通過AJAX陣列每一次的DayRender被調用時,下載陣列一旦當你的頁面加載(或預將其嵌入在網頁中,如果你能)作爲全球變量。然後在dayRender中,您可以檢入全局變量。另外'date.format()'不可能匹配'valores [i]',因爲它會包含時間。 http://momentjs.com/docs/#/displaying/format/ – ADyson

+0

感謝您回覆Adyson,但我已經完成了您告訴我的所有情況,但由於某些原因,我無法在dayren中使用變量,如果它在dayclick中作品,我已編輯我的問題 –

回答

1

date是一個moment.js日期對象。您可以比較參數添加到format方法,如:

date.format("YYYY-MM-DD") == valores[i] 
+0

更適當的方法將字符串轉換爲片刻,然後比較它們作爲日期而不是字符串比較。但是這忽略了OP提出的關於性能以及如何將數組注入dayRender的觀點。 – ADyson

+0

我已經使用數據屬性嵌入代碼,但是,出於某種原因,我不能在dayrender中使用該變量,如果它在dayclick中有效,我已編輯我的問題 –

0

我能解決這個問題,用的DayRender問題是由於同步,一旦異步更改爲false,一切完美的作品。

$.ajax({ 
     async:false, 
     cache:false, 
     dataType: 'json', 
     type: 'get', 
     url: 'getReservas', 
     data:params, 
     success: function(data) 
     { 
     myArray= new Array(data.disponibilidad.length); 
     for(var i=0;i<data.disponibilidad.length;i++) 
     { 

      myArray[i]=data.disponibilidad[i].slot_date; 
     } 
     alert("segundo"); 
     var array=$("body").data("array",myArray); 
     //for(var k=0; k< myArray.length;k++) 
     //console.log($("body").data("array")); 
     //console.log(myArray); 


     }, 

     error: function(data){ 
      alert("ha ocurrido un error") ; 

     } 
    }); 





$('#calendar_make_a_reservation').fullCalendar({ 
       height: 500, 
       dayClick: function() { 
       $('#modal_appointment_time').modal('open'); 
       //console.log($("body").data("array")); 
       }, 
       dayRender: function (date, cell) { 

       myArray.forEach(function (item) { 



    if (date.format()==item) 
    { 
     cell.css("background-color", "blue"); 
    } 
     }); 

     } 

     }) 

enter image description here

+0

這可能適用於現在,但async:false已被棄用在某些瀏覽器中,由於它創建的用戶體驗較差(如果請求花費的時間比平常長,則會鎖定瀏覽器),因此您可以預計它將在未來的某個時間停止工作。 – ADyson

+0

我已經看到,問題是由於完整的日曆方法首先加載比我的jquery請求,你是否推薦我一些替代? –

+0

你使用服務器端語言嗎?如果是這樣,你可以使用它將json注入頁面,而不是通過ajax加載。或者,從ajax請求的「成功」方法觸發日曆的創建,這樣可以保證數據將首先加載。 – ADyson