从 ngDialog 模态修改 FullCalendar 事件信息(开始和结束)
Modify FullCalendar Event Info (start and end) from ngDialog modal
我正在为带有可拖动外部事件的 arshaw 全日历使用 ui-calendar 指令。
我希望能够通过弹出对话框中的文本框编辑标题、开始和结束,而不必将事件拖到日历本身上。我将 ngDialog 用于模态,并且可以通过控制器的范围访问单击的事件。日历上的事件标题会响应更改,但开始和结束时间不会。
当我在模式中单击保存时,我将更新的信息传递给一个函数 ($scope.updateEventInfo
),在该函数中我通过 id 找到特定的 clientEvent,然后更新 clientEvent 属性。
然后我调用 fullCalendar updateEvent (.fullCalendar( 'updateEvent', event )
)
新标题将呈现在日历上,但开始和结束时间不会。
我需要某种方式来格式化或重新分配开始和结束时间吗?
控制器:
$scope.updateEventInfo = function(clickedEvent) {
var newTitle = clickedEvent.title;
var newStart = clickedEvent._start;
var newEnd = clickedEvent._end;
var clientEvent = uiCalendarConfig.calendars.myCalendar.fullCalendar('clientEvents', clickedEvent._id);
clientEvent[0].title = clickedEvent.title;
clientEvent[0].start = newStart;
clientEvent[0].end = newEnd;
uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent);
}
$scope.eventSources = [{
events: [],
color: '#428bca',
textColor: 'white',
overlap: false
}]
$scope.uiConfig = {
calendar: {
header: {
left: 'prev,next today',
center: 'title',
right: 'agendaDay,agendaTwoDay,week'
},
defaultView: 'agendaDay',
height: 'auto',
editable: true,
droppable: true,
eventClick: function(clickedEvent) {
$scope.clickedEvent = clickedEvent;
$scope.openModal('EditCalendarEvent');
},
}
};
ng对话框代码:
<div class="modal-container">
<h4>{{clickedEvent.title}}</h4>
<form>
<div class="input-field">
<input id="eventTitle" type="text" ng-model="clickedEvent.title"/>
<label for="eventTitle">Event Title</label>
</div>
<div class="input-field">
<input id="startTime" type="text" ng-model="clickedEvent.start"/>
<label for="startTime">Event Start</label>
</div>
<div class="input-field">
<input id="endTime" type="text" ng-model="clickedEvent.end"/>
<label for="endTime">Event End</label>
</div>
</form>
<button type="button" ng-click="updateEventTimes(clickedEvent)">Save</button>
</div>
过去一周我一直在摆弄这个日历。我一直在做的更新特定事件是从数组中拼接现有事件并推送新更新的事件。
$scope.saveEvent = function() {
$scope.events.forEach(function(ev) {
if (ev._id == $scope.selectedEvent._id) {
$scope.events.splice($scope.events.indexOf(ev),1);
}
});
$scope.events.push($scope.selectedEvent);
$scope.closeModal();
};
我看到其他一些人使用相同的方法,推理与日历实例和 javascript 引用有关(我不是专家)。
编辑:
实际上,我误解了您使用的方法,可能是从过时的版本中提取了该示例。
我可以通过以下方式更新事件以及日期和时间:uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent);
您只需将 'clickedEvent'
更改为 'clickedEvent[0]'
编辑二:
好吧,所以我把它搞得一团糟,我确实意识到是的,您必须将日期格式化为 momentjs 对象。像这样:
var newStart = moment(clickedEvent.start, , "MM/DD/YYYY HH:mm")
我正在为带有可拖动外部事件的 arshaw 全日历使用 ui-calendar 指令。
我希望能够通过弹出对话框中的文本框编辑标题、开始和结束,而不必将事件拖到日历本身上。我将 ngDialog 用于模态,并且可以通过控制器的范围访问单击的事件。日历上的事件标题会响应更改,但开始和结束时间不会。
当我在模式中单击保存时,我将更新的信息传递给一个函数 ($scope.updateEventInfo
),在该函数中我通过 id 找到特定的 clientEvent,然后更新 clientEvent 属性。
然后我调用 fullCalendar updateEvent (.fullCalendar( 'updateEvent', event )
)
新标题将呈现在日历上,但开始和结束时间不会。
我需要某种方式来格式化或重新分配开始和结束时间吗?
控制器:
$scope.updateEventInfo = function(clickedEvent) {
var newTitle = clickedEvent.title;
var newStart = clickedEvent._start;
var newEnd = clickedEvent._end;
var clientEvent = uiCalendarConfig.calendars.myCalendar.fullCalendar('clientEvents', clickedEvent._id);
clientEvent[0].title = clickedEvent.title;
clientEvent[0].start = newStart;
clientEvent[0].end = newEnd;
uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent);
}
$scope.eventSources = [{
events: [],
color: '#428bca',
textColor: 'white',
overlap: false
}]
$scope.uiConfig = {
calendar: {
header: {
left: 'prev,next today',
center: 'title',
right: 'agendaDay,agendaTwoDay,week'
},
defaultView: 'agendaDay',
height: 'auto',
editable: true,
droppable: true,
eventClick: function(clickedEvent) {
$scope.clickedEvent = clickedEvent;
$scope.openModal('EditCalendarEvent');
},
}
};
ng对话框代码:
<div class="modal-container">
<h4>{{clickedEvent.title}}</h4>
<form>
<div class="input-field">
<input id="eventTitle" type="text" ng-model="clickedEvent.title"/>
<label for="eventTitle">Event Title</label>
</div>
<div class="input-field">
<input id="startTime" type="text" ng-model="clickedEvent.start"/>
<label for="startTime">Event Start</label>
</div>
<div class="input-field">
<input id="endTime" type="text" ng-model="clickedEvent.end"/>
<label for="endTime">Event End</label>
</div>
</form>
<button type="button" ng-click="updateEventTimes(clickedEvent)">Save</button>
</div>
过去一周我一直在摆弄这个日历。我一直在做的更新特定事件是从数组中拼接现有事件并推送新更新的事件。
$scope.saveEvent = function() {
$scope.events.forEach(function(ev) {
if (ev._id == $scope.selectedEvent._id) {
$scope.events.splice($scope.events.indexOf(ev),1);
}
});
$scope.events.push($scope.selectedEvent);
$scope.closeModal();
};
我看到其他一些人使用相同的方法,推理与日历实例和 javascript 引用有关(我不是专家)。
编辑:
实际上,我误解了您使用的方法,可能是从过时的版本中提取了该示例。
我可以通过以下方式更新事件以及日期和时间:uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent);
您只需将 'clickedEvent'
更改为 'clickedEvent[0]'
编辑二:
好吧,所以我把它搞得一团糟,我确实意识到是的,您必须将日期格式化为 momentjs 对象。像这样:
var newStart = moment(clickedEvent.start, , "MM/DD/YYYY HH:mm")