reactJsコンポーネントでjQuery fullcalendarを使用しています。
<div id="calendar"></div>
レンダーメソッド
そしてcomponentDidUpdateで、私は次のコードでカレンダーを更新しました:
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
events: _this.state.events,
defaultView:'month',
displayEventTime: false,
editable: false,
droppable: false,
durationEditable: false
});
タイトルに「未定義」の文字が表示されます。どこで私は間違えましたか?そして、未定義の文字列がどこから来たかをデバッグする方法は?
現在、私は次のコードを追加して、タイトルからすべての未定義の文字列を削除するハッキングされたソリューションを作成しました:
viewRender: function(view, element) {
//note: this is a hack, i don't know why the view title keep showing "undefined" text in it.
//probably bugs in jquery fullcalendar
$('.fc-center')[0].children[0].innerText = view.title.replace(new RegExp("undefined", 'g'), ""); ;
},
より良い解決策はありますか?
私はjquery FullCalendar v2.9.1を使用しています
イベントに関する次のサンプルデータを使用します。
[{"start":"2017-03-24T00:00:00.000Z","end":"2017-03-26T00:00:00.000Z","title":"Open house","description":"Bali 1 open house"}]
注:結局、jqueryフルカレンダーをダンプして、react-big-calendarを優先しました。
FullCalendarをアップグレードした後も同じ問題が発生しましたが、1年近くすべてが問題なく機能しており、過去に問題なくfullCalendarをアップグレードしていたため、何らかの理由でmoment.js
をページに含める必要があったため、少しわかりました私はfullCalendarを使用していて、MVCサイトを実行していて、以前にマスターページ(_layout.cshtml
)がmoment.js
を参照していたことを確認しました。今のところそれが機能しない理由はわかりません。テストで実際の瞬間への参照を追加しましたfullCalendarを使用しているページとundefindundefinedがなくなり、イベントで発生していた別の問題も解消されました。
私の場合、修正は:
@Scripts.Render("~/bundles/dates")
あなたの場合それはちょうどかもしれません:
<script src='//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js'></script>
FullCalendar.jsをv2.6.1からv3.4.0にアップグレードした後、同じ問題が発生しました
私の場合、問題はfullcalendar.js&scheduler.min.jsmoment.jsの後に含めることで解決しました
Angular2コンポーネント内のfullcalendar v3.4.0およびfullcalendar-scheduler v1.6.2でも同じ問題があります。最後に機能するバージョンのフルカレンダーv3.1.0にダウングレードしました。この問題は、fullcalendar v3.2.0の上で発生したようです。
私は同じ問題を抱えていましたが、私にとってはmoment.jsではありませんでした。
私はnode_modulesを使用し、読み込みシーケンスはそのようでした:
require('fullcalendar');
require('fullcalendar-scheduler');
しかし、さらに調査したところ、fullcalendar-schedulerが既にfullcalendarモジュールをロードしていることがわかりました。そのため、スケジューラを保持する必要があり、すべてが正常に機能しています。
require('fullcalendar-scheduler');
結局、jqueryのフルカレンダーをダンプして、react-big-calendarを選びました。 jQueryがreactでうまく機能しない。
これをFullCalendar構成に追加すると、未定義はタイトルからストライプされます
viewRender: function(view, element) {
$('.fc-center')[0].children[0].innerText = view.title.replace(new RegExp("undefined", 'g'), "");
}
vue 'jquery'から*を$としてインポートする方がよい;
その理由は_moment.js
_による原因であり、フルカレンダーのソースで1247行目を開始しているようです
_(function(module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", { value: true });
var moment = __webpack_require__(0);
var $ = __webpack_require__(3);
var util_1 = __webpack_require__(4);
var ambigDateOfMonthRegex = /^\s*\d{4}-\d\d$/;
var ambigTimeOrZoneRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/;
var newMomentProto = moment.fn; // where we will attach our new methods
exports.newMomentProto = newMomentProto;
var oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods
exports.oldMomentProto = oldMomentProto;
// tell momentjs to transfer these properties upon clone
var momentProperties = moment.momentProperties;
momentProperties.Push('_fullCalendar');
momentProperties.Push('_ambigTime');
momentProperties.Push('_ambigZone');
/*
Call this if you want Moment's original format method to be used
*/
function oldMomentFormat(mom, formatStr) {
return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js
}
exports.oldMomentFormat = oldMomentFormat;
...
_
メインページに_moment.js
_を配置すると、最初にfullcalendar
をロードしたときに結果が正しくなり、2番目にfullcalendar
をロードしたときに_moment.fn
_独自のメソッドformat
が変更されました。moment
はglobal varです。
そして、fullcalendar
を読み込むたびにmoment.jsを読み込む場合、常に_moment.js
_のmoment
値を使用します
したがって、fullcalendar
が必要な場合は、_moment.js
_ toggertherと一緒に使用する必要があります。