Angular UI で FullCalendar を使用してカレンダーをセットアップしました。イベントのカテゴリを適切に切り替えることができますが、eventSource が更新されるたびに、カレンダー ビューが現在の日付に設定されます。
メソッドを使用してみましたが、gotoDate
機能することがわかります (コンソールからも機能します) が、カレンダーが現在の日付に戻された直後です。私は AngularJS を初めて使用gotoDate
するので、間違った場所に配置した可能性があります。しかし、私はそれを他の場所に置くかどうかはわかりません。
一連のイベント オブジェクトを返しeventSources
、カレンダー要素の ng-model にプッシュするサービスを使用しています。私が持っているコントローラーでは、特別なことは何もありません:
$scope.eventSources = [];
var promise = UserCalendarEvents.get(groupName);
promise.then(
function(events) {
$scope.eventSources.push(events);
$('#events-calendar').fullCalendar('gotoDate', 2012, 11);
},
function(reason) {
console.log('Error: ' + reason);
}
);
この場合、イベントがフェッチされ、$scope.eventSources
入力されます。次に、カレンダー ビューが 2012 年 12 月に設定され、その後ほぼ瞬時にビューが現在の日付に切り替わります。フルカレンダーを再レンダリングするのは ng-model のある種の時計ですか? もしそうなら、どうすれば選択した日付を設定できますか?
更新: joshkurz 修正の使用を終了しましたが、選択したビューを尊重する変更されたバージョンでは、つまり、ユーザーが basicWeek を選択してソース データを変更した場合、ビューは月ビューなどに変更されません。それが私がユーザーに必要としているものです。
function update() {
scope.calendar = elm.html('');
var view = scope.calendar.fullCalendar('getView');
var m;
var xtraOptions = {};
//calendar object exposed on scope
if(view){
var viewDate = new Date(view.start);
if(m !== 'Invalid Date'){
y = viewDate.getFullYear();
m = viewDate.getMonth();
d = viewDate.getDate();
if(!isNaN(y) && !isNaN(m) && !isNaN(d)){
xtraOptions = {
year: y,
month: m,
date: d
};
}
}
view = view.name; //setting the default view to be whatever the current view is. This can be overwritten.
}
/* If the calendar has options added then render them */
var expression,
options = { defaultView : view, eventSources: sources };
if (attrs.uiCalendar) {
expression = scope.$eval(attrs.uiCalendar);
// Override defaultView if is set in ui-calendar attribute - OK?
if (expression.defaultView) {
expression.defaultView = view;
}
} else {
expression = {};
}
angular.extend(options, uiConfig.uiCalendar, expression, xtraOptions);
scope.calendar.fullCalendar(options);
}