如何让 Adam Shaw 的 FullCalendar 在 rails 4 应用程序中显示响应式



我使用的是Ruby 2 Rails 4。我正在使用twitter bootstrap rails gem让我的导航栏在浏览器调整大小时崩溃。

我想要亚当·肖的《完整日历》有类似的效果。现在它将随窗口调整大小,但我希望它在浏览器为480px或更低时显示一天(basicDay视图),在视口为767以下时显示一周(basicWeek视图),并在全尺寸窗口中显示月份视图。

如果浏览器大小不同,初始化三个不同的日历会更好吗?

即:

    <script> $(document).ready(function() {
// page is now ready, initialize the calendar...
$('#calendar').fullCalendar({
   events: 'http://www.google.com/calendar/myfeed', 
    if $(window).width() < 514){
      defaultView: 'basicDay'
    }
   header: {
            left: 'title',
            center: '',
            right: 'today basicDay basicWeek month prev,next'
        },
});
});
</script>

或者有更简单、更简单的解决方案吗?

此外,我在这方面真的很新,我知道上面的示例代码不会像写的那样工作,但我至少走对了吗?

谢谢,很抱歉,如果这是在其他地方写的,我找不到,但如果有人给我指明正确的方向,我会很高兴。

更新:

作为对第一条评论的回应,为了让它发挥作用,我进入了fullcalendar.js,并更改了主渲染的工作方式(第240行)

    /* Main Rendering
-----------------------------------------------------------------------------*/

setYMD(date, options.year, options.month, options.date);

function render(inc) {
    if (!content) {
        initialRender();
    }
    else if (elementVisible()) {
        // mainly for the public API
        calcSize();
        _renderView(inc);
    }
}

function initialRender() {
    tm = options.theme ? 'ui' : 'fc';
    element.addClass('fc');
    if (options.isRTL) {
        element.addClass('fc-rtl');
    }
    else {
        element.addClass('fc-ltr');
    }
    if (options.theme) {
        element.addClass('ui-widget');
    }
    content = $("<div class='fc-content' style='position:relative'/>")
        .prependTo(element);
    header = new Header(t, options);
    headerElement = header.render();
    if (headerElement) {
        element.prepend(headerElement);
    }
    changeView(options.defaultView);
    if (options.handleWindowResize) {
        $(window).resize(windowResize);
    }
    // needed for IE in a 0x0 iframe, b/c when it is resized, never triggers a windowResize
    if (!bodyVisible()) {
        lateRender();
    }
    // added this to specify how initial rendering should act on mobile devices.  
    if ( $(window).width() < 480){
        changeView('agendaDay')
    };
}

正如你所看到的,我添加了"if($(window).width…",然而,这本身并不是一个很好的解决方案,因为它只解决了我的一半问题。初始渲染在移动窗口和浏览器窗口中都是正确的,但日历不会对浏览器窗口中的大小调整做出响应。将MarCrazyness的答案与上述解决方案相结合,解决了在浏览器中调整大小的问题。

我现在的看法是:

Schedule.html.erb$(document).ready(function){

$('#calendar').fullCalendar({
   events: 'http://www.google.com/calendar/...', 
      weekMode: 'liquid',
      defaultView: 'agendaWeek',
      allDaySlot: false,
        header: {
                  left: 'title',
                  center: 'agendaDay,agendaWeek,month',
                  right: 'today prev,next'
        },
    windowResize: function(view) {
      if ($(window).width() < 514){
        $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
      } else {
        $('#calendar').fullCalendar( 'changeView', 'agendaWeek' );
      }
    }
  });
});
</script>

注意:我更改了标题设置,但这对于该解决方案的工作来说并不是必需的。

希望这两种策略中的一种或组合能满足您的需求,如果您有一个更简单的解决方案,或者改进了任何一个答案,请加入进来,非常感谢大家的帮助。

看起来您正试图根据调整大小来更改视图。看看windowResize回调。http://arshaw.com/fullcalendar/docs/display/windowResize/.

确保handleWindowResize是它的默认值true。否则将不会调用回调。

windowResize: function(view) {
        if ($(window).width() < 514){
            $('#calendar').fullCalendar( 'changeView', 'basicDay' );
        } else {
            $('#calendar').fullCalendar( 'changeView', 'month' );
        }
}

相关内容

  • 没有找到相关文章