2011-01-10 28 views
7

Tôi không chắc liệu tôi có sử dụng đúng cách này hay không vì vậy vấn đề của tôi có thể là hiểu lầm của tôi hơn là lỗi hoặc vấn đề lớn hơn.rerenderEvents/refetchEvents problem

Tôi có một lịch đầy đủ được bắt đầu từ tài liệu sẵn sàng như thế này (một số mã bị bỏ qua để ngắn gọn).

function renderEvents() { 
     var date = new Date(); 
     var d = date.getDate(); 
     var m = date.getMonth(); 
     var y = date.getFullYear(); 
     var technicians = $("div[ID*='ucTechnicians'] :hidden").val(); 

     var calendar = $('#calendar').fullCalendar({ 


     ... 
      events: "JsonResponse.ashx?technicians=" + technicians, 
     ...  
    } 

Trang trả lời json thành công trả về các sự kiện được lọc bởi kỹ thuật viên đã chọn khi tải ban đầu. Trên trang chính là một điều khiển để thay đổi các kỹ thuật viên mà người dùng muốn xem trên lịch. Tôi không thể lấy lại lịch để trả lại và chuyển thông số kỹ thuật cho tệp reposne json.

Từ lần nhấp nút, tôi đã thử gọi hàm renderEvents() một lần nữa. Thao tác này sẽ đặt lịch trùng lặp trên trang. Tôi đã thử $ ('# lịch'). ('Phá hủy') trước khi gọi hàm renderEvents(). Điều này làm việc nhưng nếu tôi đang ở trong một cái nhìn khác thì xem tháng mặc định nó sẽ allways thiết lập lại và phá hủy xây dựng lại lịch có vẻ như rất nhiều công việc cho một làm mới.

Tôi cũng đã thử $ ('# lịch'). ('RerenderEvents') và $ ('# calendar'). ('RefetchEvents'). Tôi thậm chí đã cố gắng thiết lập lại nguồn $ ('# lịch'). FullCalendar ('addEventSource', 'JsonResponse.ashx? Technicans =' + kỹ thuật viên) trước thời hạn. Trong trường hợp cuối cùng, tôi có thể xem phản ứng json khi gỡ lỗi và nó nhận thông số bộ lọc và trả về kết quả được lọc theo các thông số mới nhất nhưng lịch trên trang không làm mới với các giá trị mới.

Làm cách nào để làm mới lịch với thông số mới?

Xin cảm ơn trước.

Trả lời

11

Trong giả, loại bỏ các sự kiện cũ, thêm một nguồn sự kiện mới, sau đó tìm nạp lại các sự kiện (từ nguồn duy nhất, mà bây giờ là nguồn mới):

  • Đây là chưa được kiểm tra, nhưng cố gắng loại bỏ những sự kiện cũ :

$('#calendar').fullCalendar('removeEvents')

  • Sau đó, thêm nguồn sự kiện mới (Theo các tài liệu, điều này sẽ lấy các sự kiện và hiển thị chúng trên màn hình, nhưng nó xuất hiện không làm việc, vì vậy theo nó với lệnh tiếp theo đó là giống như một refresh):

$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians)


EDIT:Thay vì:

Sau đó tìm nạp lại và đưa ra những sự kiện mới:

$('#calendar').fullCalendar('refetchEvents')

OR:

  • Sử dụng những điều sau đây, như bạn đề cập, chạy addEventSource fetches các sự kiện mới, vì thế này nên làm cho sự kiện mới lấy:

$('#calendar').fullCalendar('rerenderEvents')

+0

Hoạt động tuyệt vời, cảm ơn rất nhiều! – zuallauz

+0

Không hoạt động đối với tôi. xem các sự kiện mới của tôi.[{"đặt chỗ": "3232", "trạng thái": "Khoản tiền gửi đang chờ xử lý", "tiêu đề": "đặt chỗ", "bắt đầu": "2016-10-18T06: 45: 00 + 00: 00", "kết thúc" : "2016-10-18T11: 30: 00 + 00: 00"}, {"đặt chỗ": "3231", "trạng thái": "Đang chờ phê duyệt", "tiêu đề": "HelloFriends", "bắt đầu": "2016 -10-18T10: 30: 00 + 00: 00 "," kết thúc ":" 2016-10-18T11: 30: 00 + 00: 00 "}] –

6

Cảm ơn sự giúp đỡ!

Dưới đây là những gì đã làm việc dựa trên các đề xuất của Scoobler các bước hoạt động là (1) removeEvents. (2) addEventSource, (3) rerenderEvents.

$('#calendar').fullCalendar('removeEvents'); 
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians); 
$('#calendar').fullCalendar('rerenderEvents'); 
+0

Cảm ơn bạn đã đăng giải pháp, điều đó khiến tôi phát điên! – zuallauz

+0

Khi tôi làm điều này, tôi luôn nhận được bản sao mới. –

+1

Điều này làm việc hoàn hảo cho tôi. Tôi đã sử dụng một mảng cho danh sách sự kiện của mình thay vì $ ('# calendar'). FullCalendar ('removeEvents'); $ ('# calendar'). FullCalendar ('addEventSource', eventList); $ ('# calendar'). FullCalendar ('rerenderEvents'); – ter24

0
$('#calendar').fullCalendar('removeEvents'); 
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians); 
$('#calendar').fullCalendar('rerenderEvents'); 

Các giải pháp trên công trình, nhưng mỗi khi bạn chạy nó, nó thêm một EventSource.

Vì vậy, khi bạn cần chạy $('#calendar').fullCalendar('refetchEvents'); bạn sẽ nhận được các sự kiện từ tất cả các nguồn, rất nhiều sự kiện và sự kiện cộng hòa từ tất cả các nguồn trước đó.

Các giải pháp mà làm việc cho tôi tốt là:

$('#calendar').fullCalendar('removeEventSource', 'JsonResponse.ashx?technicans=' + technicians); 
technicians = new_technicians_value; 
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians); 

Và không có nhu cầu "rerenderEvents" hoặc "refetchEvents".

Sau khi sự kiện "addEventSource" sẽ được tìm nạp ngay lập tức từ nguồn mới.

Sau đó "refetchEvents" sẽ hoạt động như dự kiến ​​khi cần.