0

同じ JS ファイル内で「eventNew」関数を呼び出すことができるかどうかを知りたいです。別の関数から「eventNew」関数にアクセスしようとしています。

コードの一部を次に示します。

$calendar.weekCalendar({
    displayOddEven: true,
    timeslotsPerHour: 4,
    allowCalEventOverlap: true,
    overlapEventsSeparate: true,
    firstDayOfWeek: 1,
    businessHours: { start: 1, end: 24, limitDisplay: true },
    daysToShow: 7,
    switchDisplay: { '1 day': 1, '3 next days': 3, 'work week': 5, 'full week': 7 },
    title: function (daysToShow) {
        return daysToShow == 1 ? '%date%' : '%start% - %end%';
    },
    height: function ($calendar) {
        return $(window).height() - $("h1").outerHeight() - 1;
    },
    eventNew: function (calEvent, $event) {
        var $dialogContent = $("#event_edit_container");
        resetForm($dialogContent);
        var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
        var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
        var titleField = $dialogContent.find("input[name='title']");
        var bodyField = $dialogContent.find("textarea[name='body']");


        $dialogContent.dialog({
            modal: true,
            title: "New Calendar Event",
            close: function () {
                $dialogContent.dialog("destroy");
                $dialogContent.hide();
                $('#calendar').weekCalendar("removeUnsavedEvents");
            },
            buttons: {
                save: function () {
                    calEvent.id = id;
                    id++;
                    calEvent.start = new Date(startField.val());
                    calEvent.end = new Date(endField.val());
                    calEvent.title = titleField.val();
                    calEvent.body = bodyField.val();

                    SaveEvent(); // Modified

                    $calendar.weekCalendar("removeUnsavedEvents");
                    $calendar.weekCalendar("updateEvent", calEvent);
                    $dialogContent.dialog("close");
                },
                cancel: function () {
                    $dialogContent.dialog("close");
                }
            }
        }).show();

        $dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start));
        setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start));

    }
});
4

2 に答える 2

0

関数eventNewは匿名オブジェクトで定義されているため、技術的には、同じオブジェクトで定義された関数から呼び出すことができますthis.eventNew(...).

于 2012-04-17T14:20:22.330 に答える
0

はい、できます。関数を変数のオブジェクトの外側に配置し (グローバル名前空間を汚染しないように名前空間を設定することが望ましい)、必要な場所からそれを呼び出します。

var namespace.myEventNew = function (calEvent, $event) {
   [code here]
}

$calendar.weekCalendar({
  ...
  eventNew : function (calEvent, $event) {
      namespace.myEvent(calEvent, $event);
  },
  ...
});

任意の種類の pub/sub システムとさらに疎結合して、これを実行したい場合があります。参照: https://gist.github.com/1321768

于 2012-04-17T14:22:56.837 に答える