Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX onMonthAdd加载Framework7日历事件_Javascript_Jquery_Dom_Calendar_Html Framework 7 - Fatal编程技术网

Javascript 使用AJAX onMonthAdd加载Framework7日历事件

Javascript 使用AJAX onMonthAdd加载Framework7日历事件,javascript,jquery,dom,calendar,html-framework-7,Javascript,Jquery,Dom,Calendar,Html Framework 7,类似的问题,但我认为仍然有独特的不同: 我有一个内联日历,其中包含从AJAX脚本加载的事件,我可以让它正常工作,但是在未来的许多年中会有数百个事件。我需要的是一种加载当月事件并根据需要添加它们的方法。我想这可以通过onMonthAdd实现,但我遇到的问题是,当我将新元素推送到p.events时,新事件直到从元素中删除并读取月份后才会加载 例如:onMonthAdd为1月我为1月11日添加了一个事件。然后,当一月进入视图时,事件不会显示。但是,当我回到12月,然后回到11月时,1月份的日历将从DO

类似的问题,但我认为仍然有独特的不同:

我有一个内联日历,其中包含从AJAX脚本加载的事件,我可以让它正常工作,但是在未来的许多年中会有数百个事件。我需要的是一种加载当月事件并根据需要添加它们的方法。我想这可以通过onMonthAdd实现,但我遇到的问题是,当我将新元素推送到p.events时,新事件直到从元素中删除并读取月份后才会加载

例如:onMonthAdd为1月我为1月11日添加了一个事件。然后,当一月进入视图时,事件不会显示。但是,当我回到12月,然后回到11月时,1月份的日历将从DOM中删除。然后导航回一月,在DOM中重新创建月份,然后它将显示事件

主要问题是,如果onMonthAdd似乎是在将月份添加到DOM之后触发的,那么在DOM中创建元素之前添加事件如何可能。我找不到任何对beforeMonthAdd函数的引用

AJAX是不相关的,我可以让它工作,如果我能找到一种方法,只需在添加的月份中添加一个事件(没有AJAX)

下面是我尝试过的一些代码(不包括AJAX),但它在创建日历时不起作用,但在DOM中重新创建月份之前不会使用新日期进行更新:

...
var calendarInline = myApp.calendar({
    container: '#calendar-inline-container',
    weekHeader: true,
    firstDay: 0,
    events: [
      new Date(2017,7,1),
      new Date(2017,7,31),
      new Date(2017,8,1),
      new Date(2017,8,30),
      new Date(2017,9,1),
      new Date(2017,9,31),
      new Date(2017,10,1),
      new Date(2017,10,30),
      new Date(2017,11,1),
      new Date(2017,11,31)
    ],
    onMonthAdd: function(p,monthContainer){
        var thisYear = $(monthContainer).find('picker-calendar-month').context.attributes['data-year'].value;
        var thisMonth = $(monthContainer).find('picker-calendar-month').context.attributes['data-month'].value;
        if(thisMonth==0){
            p.params.events.push(new Date(thisYear,thisMonth,11));
        }

    },
});
...
我找到了一种迂回的方法,通过使用当前年份和月份执行setYearMonth来“重新加载”日历,实现了这一点,但问题是,当更改年份时,它实际上会创建一个无休止的循环。下面是代码:

    ...
    onMonthAdd: function(p,monthContainer){
        var thisYear = $(monthContainer).find('picker-calendar-month').context.attributes['data-year'].value;
        var thisMonth = $(monthContainer).find('picker-calendar-month').context.attributes['data-month'].value;
        if(thisMonth==0){
            p.params.events.push(new Date(thisYear,thisMonth,11));
            p.setYearMonth(p.currentYear, p.currentMonth, 1);
        }

    },
    ...

我对framework7和calendar对象的一些发现:

  • 开始时加载三个月(上一个月、当前月和下一个月)
  • 事件在添加后不会被删除,即使在从DOM中删除该月后,也会保留在日历对象中
  • 同一日期的多个事件除了减慢脚本速度之外没有任何效果
  • 在月日之前没有回调,仅在月日之后添加
  • 可以通过调用setYearMonth并将持续时间设置为1毫秒来重新加载DOM,使其不可见转换
这里是修复,我不是张贴所有的实际代码,但只是过程

  • 创建一个数组变量来存储已处理的日期和 从AJAX检索事件以防止额外工作和无休止的循环
  • 在处理ajax调用之前,请检查月+年是否已经存在 已处理月份数组
  • 如果不在数组中,则使用AJAX添加到数组并检索事件
  • AJAX完成且数据有效后,添加到p.param.events并重新加载 使用setYearMonth在DOM中创建日历

  • 这对我的项目非常有效,用户交互流畅且快速。

    我关于framework7和calendar对象的一些发现:

    • 开始时加载三个月(上一个月、当前月和下一个月)
    • 事件在添加后不会被删除,即使在从DOM中删除该月后,也会保留在日历对象中
    • 同一日期的多个事件除了减慢脚本速度之外没有任何效果
    • 在月日之前没有回调,仅在月日之后添加
    • 可以通过调用setYearMonth并将持续时间设置为1毫秒来重新加载DOM,使其不可见转换
    这里是修复,我不是张贴所有的实际代码,但只是过程

  • 创建一个数组变量来存储已处理的日期和 从AJAX检索事件以防止额外工作和无休止的循环
  • 在处理ajax调用之前,请检查月+年是否已经存在 已处理月份数组
  • 如果不在数组中,则使用AJAX添加到数组并检索事件
  • AJAX完成且数据有效后,添加到p.param.events并重新加载 使用setYearMonth在DOM中创建日历
  • 这对我的项目非常有效,用户交互也非常流畅和快速