【问题标题】:How can I get Adam Shaw's FullCalendar to display responsive in a rails 4 app如何让 Adam Shaw 的 FullCalendar 在 Rails 4 应用程序中显示响应式
【发布时间】:2013-08-12 20:15:10
【问题描述】:

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

我希望 Adam Shaw 的 FullCalendar 具有类似的效果。现在它会随着窗口调整大小,但我希望它在浏览器为 480 像素或以下时显示一天(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>

注意:我更改了标题设置,但这绝不是此解决方案正常工作所必需的。

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

【问题讨论】:

  • 你能分享一下你是如何让它响应的吗?我目前正在尝试这样做,将不胜感激
  • 真心希望得到您的回答,非常感谢朋友!
  • @Joe Susnick 我也想知道您是如何获得插件响应式的以及拖放选项是否适用于移动设备?
  • 你不能在页面加载时根据窗口大小动态设置defaultView选项,而不是破解插件源吗?

标签: jquery ruby-on-rails twitter-bootstrap fullcalendar


【解决方案1】:

您似乎正在尝试根据调整大小来更改视图。看一下 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' );
        }
}

【讨论】:

  • 同样在首次加载时,defaultView 可以设置为 $(window).width() &lt; 514 ? 'basicDay' : 'month'
猜你喜欢
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2016-09-25
  • 2020-09-23
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
相关资源
最近更新 更多