質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

5720閲覧

fullcalendarのschedulerのタイムラインに複数のeventが表示されないようにしたい。

Misaco

総合スコア17

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

0クリップ

投稿2016/06/11 14:15

fullcalendarのschedulerを使用しています。

event.id が ひとつに対し、ResourceのIDが複数あります。
ResourceのIDが10個の場合、eventResizeを実行すると、
eventResizeを実行したResourceのタイムラインのセルに、10個のイベントが表示されてしまいます。

現在は、以下の方法で回避しています。

①$('#calendar').fullCalendar("removeEvents", event.id) でeventを削除。
↑ひとつのタイムラインにeventが複数表示されないように
②eventResizeを実行していいか確認ダイアログを表示。
②ダイアログOK→保存処理実行、いいえ→リロード
④保存処理成功→eventRenderで保存したデータを反映、失敗→リロード

$('#calendar').fullCalendar("removeEvents", event.id) でeventを削除しているので、保存処理が失敗した場合や確認処理でキャンセルした場合、revertFuncがききません。

eventResize前の情報を取得できれば、eventRenderで、再表示も考えましたが、
eventResizeStartで、evetResize前のeventが拾えませんでした。

処理が失敗したとき、キャンセルが押されたときに、できればリロードしたくないので(処理失敗やキャンセルはrevertFuncを使いたい)、ひとつのタイムラインに、eventがたくさん表示されてしまう現象を、回避させる方法があれば、教えていただきたいです。

javascript

1eventResizeStop: function (event, jsEvent, ui, view) { 2 // リソースIDを取得する 3 resourceIdArray = []; 4 var clientEvent = $('#calendar').fullCalendar('clientEvents', event.id); 5 6 $.each(clientEvent, function() { 7 resourceIdArray.push(this.resourceId); 8 }); 9}, 10eventResize: function (event, dayDelta, revertFunc, jsEvent, ui, view) { 11 12 var currentEvnet = event; 13 var clientEvent = $('#calendar').fullCalendar('clientEvents', event.id); 14 15 // fullcalendarからイベントを削除 ↓ほんとは、ここで削除したくない。 16 $('#calendar').fullCalendar("removeEvents", event.id) 17 18 // イベントIDに複数のリソースがあれば確認メッセージダイアログを表示する。 19 if (clientEvent[0].kiki_no > 1) { 20 $.confirm() 21 .done(function () { 22 // 保存処理実行 23 ExecEventResize(currentEvnet, dayDelta, revertFunc,jsEvent, ui, view); 24 }) 25 .fail(function () { 26 //revertFunc();←これをやりたい。 27 28 // removeEventでイベントを消してしまっているのでrevertFuncが効かない。 29 // 確認ダイアログの前にremoveEventしないと、リソースイベントが1つのタイムラインに表示されてしまう。 30 // revertFuncの代わりにrenderEventは、eventResizeの前のイベントがeventResizeStartでも拾えないのでムリ。 31 pageReload(); 32 return; 33 }); 34 return; 35 } 36 37 // 保存処理実行 38 ExecEventResize(event, dayDelta, revertFunc, jsEvent, ui, view); 39},

宜しくお願いします。

kei344👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

eventResizeStart で、リサイズ前の日付(end)を取得できました。

JavaScript

1eventResizeStart: function( event, jsEvent, ui, view ) { 2 event.prevStart = event.start; 3 event.prevEnd = event.end; 4}, 5eventResizeStop: function (event, jsEvent, ui, view) { 6 resourceIdAry = []; 7 var clientEvent = $('#group_calendar').fullCalendar('clientEvents', event.id); 8 $.each(clientEvent, function() { 9 resourceIdAry.push(this.resourceId); 10 }); 11}, 12eventResize: function (event, dayDelta, revertFunc, jsEvent, ui, view) { 13 14 var ev = event; 15 $('#calendar').fullCalendar("removeEvents", event.id); 16 17 AjaxSave("xxxx").done(function (result) { 18 if (result.ReturnCode != 0) { 19 $.each(resourceIdAry, function () { 20 var item = { 21 resourceId: this, 22 id: ev.id, 23 allDay: ev.allDay, 24 : 25 start: ev.prevStart, 26 end: ev.prevEnd, 27 } 28 $('#calendar').fullCalendar('renderEvent', item, 'stick'); 29 }); 30 : 31 : 32},

投稿2016/06/21 08:41

Misaco

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問