我目前正在开发一个日历,可以将活动拖放到其他日期。当一个活动被放到不同的日子时,我使用 durandal 的对话框插件显示一个自定义模式。问题是当用户关闭模式时,活动必须恢复到其原始位置。删除活动时,将调用以下代码:
function showDroppedActivityModal(obj) {
require(['modals/droppedActivityModal/droppedActivityModal', 'moment'], function(droppedActivityModal, moment) {
droppedActivityModal.show(obj).then(function(response) {
if(response !== false) {
...
}
// dialog closes
else {
calendarView.revertActivity.notify({ revert: true})
}
});
});
}
在我的 calendarView 中,我实现了 revertActivity 事件以将 revert 设置为 true,但该函数永远不会重新评估自身,但我能够接收到新的 revert 值(true)。
$(activity).draggable({
revert: function() {
var revert = false;
self.revertActivity.attach(function(sender, args) {
revert = args.revert;
});
return revert;
}
});
自定义事件代码:
function CalendarEvent(sender) {
this._sender = sender;
this._listeners = [];
}
CalendarEvent.prototype = {
attach : function (listener) {
this._listeners.push(listener);
},
notify : function (args) {
var index;
for (index = 0; index < this._listeners.length; index += 1) {
this._listeners[index](this._sender, args);
}
},
remove : function (listener){
this._listeners.remove(listener);
}
};
this.revertActivity = new CalendarEvent(this);