ترتيب تنفيذ التقويم الكامل للأحداث عند النقر فوق الزر المخصص

0

ما أحاول القيام به هو زر التصفية الذي عندما ينقر المستخدم عليه ، ويكتب اسم المورد ، ثم تظهر الأحداث التي تتطابق فقط مع اسم المورد. في البداية ، يتم تقديم جميع الأحداث. بعد ذلك ، عندما ينقر المستخدم على زر البحث ، يتم عرض الأحداث المطابقة للمورد الذي كتبه المستخدم فقط. أقوم بذلك باستخدام removeEvents ، والتي تزيل جميع الأحداث التي لم تستوف الشرط. ومع ذلك ، فإن المشكلة هي ، بعد البحث مرة واحدة ، إذا كتب المستخدم اسم مورد آخر ، فلن يتم عرض أي أحداث ، لأن الأحداث التي بحث عنها المستخدم قد تمت إزالتها بالفعل. وبالتالي ، أقوم بإضافة refetchEvents قبل removeEvents. ومع ذلك ، هذه المرة ، لا تتم إزالة أي أحداث ، ويتم عرض جميع الأحداث بسبب refetchEvents ، حتى لو قمت بكتابتها قبل removeEvents. هذا هو الرمز

myCustomButton1: {
              text: 'filter by resource',

              click: function() {

                $("#calendar").fullCalendar('refetchEvents');
                var teachername = prompt("type the name of teacher");
                var teacherlist = <?php echo $json_array8; ?>;
                var exist = false;
                if(prompt)
                {   


                    for(var i = 0; i < teacherlist.length ; i++)
                    {
                        if(teacherlist[i]["courseTeacher"] == teachername)
                        {
                            exist = true;
                        }

                    }
                }
                if(!exist)
                {
                    alert("check the resource name.");
                }
                else
                {

                    $('#calendar').fullCalendar('removeEvents', function (calEvent) {
                                if(calEvent.resourceId != teachername)
                                {
                                    return true;
                                }else
                                {
                                    return false;
                                }

                        });

                }
             }
            }

1 إجابة

0

لا تستخدم removeEvents. وفقًا للتوثيق ( https://fullcalendar.io/docs/removeEvents ) ، فإن removeEvents يزيل الأحداث تمامًا من كائن التقويم. ولهذا السبب لا تجد الأحداث عند الكتابة في سلسلة بحث جديدة.

بدلاً من ذلك ، ما يمكنك فعله هو استخدام element.hide () و element.show () في رد اتصال eventRender.

eventRender: function(event, element){
    var teacherlist = <?php echo $json_array8; ?>;
    if(prompt)
    {   


        for(var i = 0; i < teacherlist.length ; i++)
        {
            if(teacherlist[i]["courseTeacher"] == teachername)
            {
                exist = true;
            }

        }
    }

    if(exist)
    {
        element.hide();
    }
    else
    {
        element.show();
    }

}

ملاحظة: الجانب السلبي لاستخدام إظهار / إخفاء هو أنه في طريقة عرض الشهر ، فإن طريقة عمل التقويم الكامل هي أنه يعرض الأحداث في بنية جدول. لذلك إذا قمت بإخفاء حدث ، فإن الأحداث لا تتدفق ، وعلى هذا النحو ، سيكون لديك بعض الفجوات الفارغة التي قد تبدو وكأنها مشكلة عرض. للحصول على هذه الشاشة التي تصدرها ، لن يكون لديك خيار سوى إعادة عرض جميع الأحداث باستخدام مصدر جديد للحدث. إحدى الطرق السهلة هي التأكد من أن مصدر eventSource الذي تستخدمه يجعل مكالمة ajax. يمكنك التأكد من قيامك بتمرير سلسلة البحث في ajaxCall وإجراء المعالجة في ملف ajax. ستكون القيمة التي تم إرجاعها هي الأحداث التي تمت تصفيتها والتي تريد عرضها. لن تحصل على مشكلة في العرض هنا لأن reRenderEvents يُسمى داخليًا. مرة أخرى ، فإن الجانب السلبي لهذه الطريقة المحددة هو أنه سيتعين عليك إجراء مكالمات ajax في كل مرة تريد فيها تصفية أحداث التقويم.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام