【发布时间】:2017-11-05 21:20:23
【问题描述】:
类似的问题,但我相信仍然与众不同:Framework7 datepicker modify events after initializing
我有一个内联日历,其中包含从 AJAX 脚本加载的事件,我可以让它工作,但是有数百个事件在未来很多年。我需要的是一种仅加载本月事件并根据需要添加它们的方法。我在想这可以用 onMonthAdd 来完成,但我遇到的问题是,当我将一个新元素推送到 p.events 时,新事件不会加载,直到从元素中删除月份并重新加载。
例如:onMonthAdd 为 1 月我添加了 1 月 11 日的事件。然后当 1 月进入视图时,该事件不会显示。但是,当我导航回到 12 月,然后再导航到 11 月时,1 月份的日历会从 DOM 中删除。然后导航回到一月,它在 DOM 中重新创建月份,然后它将显示该事件。
主要问题是,如何在 DOM 中创建元素之前添加事件 如果 onMonthAdd 似乎在月份添加到 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);
}
},
...
【问题讨论】:
标签: javascript jquery dom calendar html-framework-7