如何在完整日历中重新排列标题中的按钮

时间:2014-08-18 14:12:38

标签: jquery fullcalendar

我使用FullCalendar生成一些事件。我想重新排列标题中的按钮。

例如,月,周和日按钮应显示在第一行。标题应放在prev和next按钮之间。怎么做到这一点?

提前致谢。

$('#calendar').fullCalendar({
    header: {
        left: 'prev',
        center: 'title',
        right : 'next'
    },
    titleFormat: {
        month: 'MMMM yyyy',
        week: 'MMMM yyyy',
        day: 'MMMM yyyy'                   
    },
    contentHeight: 300,
    height: 200 ,
    eventRender: function(event, element) {
        element.popover({
            title: event.title1,
            placement: 'auto',
            html: true,
            trigger: 'click',
            animation:'true',
            content: event.msg,
            container: 'body'
        });

        $('body').on('click', function(e) {
            if (!element.is(e.target) && element.has(e.target).length === 0 && $('.popover').has(e.target).length === 0)
                element.popover('hide');
        });
    },
    events: eventData 
});

3 个答案:

答案 0 :(得分:3)

FullCalendar中没有可用的方法提供您所需的方法。

但是,您可以手动添加。在下面的代码中,我添加了在FullCalendar初始化之后调用的函数addButtonsbindButtonActions。第一个函数创建按钮所需的DOM,并将生成的内容附加到FullCalendar标头。

第二种方法将click操作绑定到按钮(即,当您单击Week时,将调用changeView方法。)

另一种选择是更改FullCalendar的源代码,但我不同意这个选项,因为更新插件会更加困难。

这是working jsfiddle和代码。

<div id="calendar"></div>
<script>
    $(document).ready(function() {
        $('#calendar').fullCalendar({
            header: {
                left: 'prev',
                center: 'title',
                right : 'next'
            },
            titleFormat: {
                month: 'MMMM YYYY',
                week: 'MMMM YYYY',
                day: 'MMMM YYYY'
            },
            contentHeight: 300,
            height: 200,
            eventRender: function(event, element) {
                element.popover({
                    title: event.title1,
                    placement: 'auto',
                    html: true,
                    trigger: 'click',
                    animation:'true',
                    content: event.msg,
                    container: 'body'
                });

                $('body').on('click', function(e) {
                    if (!element.is(e.target) && element.has(e.target).length === 0 && $('.popover').has(e.target).length === 0)
                        element.popover('hide');
                });
            }
        });

        addButtons();

        bindButtonActions();

        function addButtons() {
            // create buttons
            var month = $("<span/>")
                .addClass("fc-button fc-button-month fc-state-default fc-corner-left fc-state-active")
                .attr({
                    unselectable: "on"
                })
                .text("moth");

            var week = $("<span/>")
                .addClass("fc-button fc-button-agendaWeek fc-state-default")
                .attr({
                    unselectable: "on"
                })
                .text("week");

            var day = $("<span/>")
                .addClass("fc-button fc-button-agendaDay fc-state-default fc-corner-right")
                .attr({
                    unselectable: "on"
                })
                .text("day");

            // create tr with buttons.
            // Please note, if you want the buttons to be placed at the center or right,
            // you will have to append more <td> elements
            var tr = $("<tr/>").append(
                $("<td/>")
                    .addClass("fc-header-left")
                    .append(month)
                    .append(week)
                    .append(day)
            );

            // insert row before title.
            $(".fc-header").find("tr:first").before(tr);
        }

        function bindButtonActions(){
            var date = new Date();
            // bind actions to buttons
            $(".fc-button-month, .fc-button-agendaWeek, .fc-button-agendaDay").on('click', function() {
                var view = "month";
                if ($(this).hasClass("fc-button-agendaWeek")) {
                    view = "agendaWeek";
                } else if ($(this).hasClass("fc-button-agendaDay")) {
                    view = "agendaDay";
                }

                $('#calendar').fullCalendar('changeView', view);
            });
        }
    });
</script>

答案 1 :(得分:1)

使用fullcalendar 2.0.3

在完整日历的初始化中,您可以添加

 header: {
        left: 'prev,title,next today',
        center: '',
        right: 'month,agendaWeek,agendaDay'
      },

在render()

中的完整calendar.js中
function render() {
        tm = options.theme ? 'ui' : 'fc';
        var sections = options.header;
        if (sections) {
            element = $("<table class='fc-header' style='width:100%'/>")
               .append($("<tr/>").append(renderSection('right')))
                .append(
                    $("<tr/>")
                        .append(renderSection('left'))
                ).append(renderSection('center')
                );
            return element;
        }
    }

您可以根据需要自定义表格创建。

但正如@milz所说,编辑代码可能会在下一个完整日历版本中破坏您的更改。

答案 2 :(得分:0)

对于其他在这个问题上磕磕绊绊的人,在v2.4.0中,自定义按钮被添加到fullcalendar中:

https://fullcalendar.io/docs/display/customButtons/

$('#calendar').fullCalendar({
    customButtons: {
        myCustomButton: {
            text: 'custom!',
            click: function() {
                alert('clicked the custom button!');
            }
        }
    },
    header: {
        left: 'prev,next today myCustomButton',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    }
});