3

アップグレードが必要な理由
ある日付を過ぎた日付へのナビゲートを無効にする機能が必要なため、jscalendar(http://www.dynarch.com/projects/calendar/old/)からjscal2(http私のプロジェクトでは//www.dynarch.com/projects/calendar/)。しかし、新しいjscal2のホームページとドキュメントでは、次のことが言及されています-

  • これはまったく新しい製品であることに注意してください。

  • 古いカレンダープロジェクトとは互換性がないことに注意してください。

問題
それで、私の現在のプロジェクトで最小限の変更でアップグレードが可能であるかどうか、そしてもしそうなら、それをどのように正確に行うか、私は混乱しています。私はすでにサイトにコメントを投稿しました-http ://www.dynarch.com/projects/calendar/discussion/そしていくつかの返事を待っています。とりあえず、この商品を使ったことのある人なら助けてくれるのではないかと思いましたので、ここで質問します。

私のプロジェクトの既存のコードはjscalendarバージョン1.51を使用しています(calendar.jsファイル--calendar.js、v 1.51にこの行が記述されていることがわかります)。function showCalendar()これらのヘルパーコードには、次のように呼び出しを含む行がいくつかありますvar cal = new Calendar()-

function setActiveStyleSheet()
function selected()
function closeHandler()
function showCalendar(){
    ...
    //some lines of code
    ... 
    var cal = new Calendar(1, null, selected, closeHandler);
    ...
    //some lines of code
    ... 
}
....

ここで同じことを確認してくださいhttp://pastebin.com/QHAb0WdB

しかし、今日ダウンロードした新しいバージョンのデモには、そのヘルパースクリプトが表示されません。古いバージョンのすべてのjs/cssファイル、新しいバージョンのインクルードファイルを削除してみましたが、同じjscalendar.jsのみを保持していますが、このjsエラーが発生します-

_dynarch_popupCalendar is not defined
[Break On This Error] if (_dynarch_popupCalendar != null) { 

onSelectこのように新しいカレンダーの開始にパラメータを追加することで、過去の日付を制限できると思いました-

onSelect: function() {
   var date = Calendar.intToDate(this.selection.get());
   LEFT_CAL.args.min = date; // setting minimum date, so as to not allow browsing past this date
   LEFT_CAL.redraw();
   this.hide();
}

しかし、ヘルパースクリプトの変更が失敗した後、何も試しませんでした。

正しいアップグレードプロセスについてご意見がありましたらお知らせください。何が足りないのかわかりません。

jsのインクルードを変​​更するのと同じくらい簡単で、cssファイルの可能性があり、コードを変更する必要はないと思っていました。必要に応じて、日付の無効化に対応するいくつかの構成パラメーターを設定する必要があります。

アップデート
今よりシンプルに!!

まず第一に、これはアップグレードではありません。jscal2(私が使用したいもの)のドキュメントには-

  • これはまったく新しい製品であることに注意してください。

  • 古いカレンダープロジェクトとは互換性がないことに注意してください。

カレンダーを呼び出すために必要な最小値は-

Calendar.setup({
    cont          : "calendar-container"  // a cont or a trigger
});

すべての引数はオプションです。ただし、cont(インラインカレンダーの場合)またはポップアップカレンダーのトリガーのいずれかを提供するか、ポップアップカレンダーを表示するための独自のコードを提供する必要があります。これをどのように行うことができるかは後で説明します。

このようなポップアップカレンダーを表示するには、そのコードを書く必要があると思います-

function showCalendar(){
    ...
    //some lines of code
    ... 
    var cal = new Calendar();
    ...
    //some code to display the calendar, based on the details already being passed to this function - which button was clicked, where to attach the calendar, etc.
    ... 
}

しかし、ドキュメントにはそのようなコードはありませんでした。このコードで試しましたが、機能しません-

function trigger()
{

cal = new Calendar({
        inputField: "startdate",
        dateFormat: "%B %d, %Y",
        bottomBar: false,
        showTime:true
        }
});
cal.redraw(); //blind try - does not work, but it does not give any errors. But I 
don't see any other proper function to do this in the doc.  
}

アイデアの人はいますか?

ありがとう

バウンティスタート
あまり良くない、最適化されていない解決策を見つけ、答えを投稿しましたが、それでも適切な解決策を探しています。

4

1 に答える 1

1

自分自身に答えますが、それでも適切な解決策を探しています。showCalendar()jscalendarからjsCal2に移行した後も関数を使い続けるためにこのコードを書きました-

var instance = null; //tracker of calendar instances

function showCalendar(id, format, showsTime, showsOtherMonths) 
{
    //some code here


    //create a dummy holder so as to place the calendar inside, so that I can use the "cont" attribute. (Have to use either cont or trigger. )
    if(instance!=null)
    {
        instance.hide();
        instance = null;
        $("table.DynarchCalendar-topCont").remove(); //I am having to kill the earlier calendar instance on every calendar display call, because otherwise multiple instances were getting created in DOM, causing confusion. 

        //get date in input field - since earlier instance is killed

    }


if($("div#container").length == 0)
    {
        $('body').append('<div id="container" style="position: absolute;">&nbsp;</div>');
    }


        cal = new Calendar({
                cont: "container",
                inputField: id,
                dateFormat: format,
                bottomBar: false,
                min: minDateLimit,
                showTime: showsTime,
                weekNumbers: true,
                selection : intDate,
                onSelect: function() {

                    //set selected value into attached input field
                    var selectedDate = this.selection.get();
                    date = Calendar.intToDate(selectedDate);
                    date = Calendar.printDate(date, format);
                    $('#'+id).val(date);

                    this.hide();
                },
                onBlur: function() { //clicking outside hide calendar
                    this.hide();
            }
        });

    cal.moveTo(intDate); //since new instance of calendar is being created everytime, need to move to the date 
    cal.popup(id,"Br");
    instance = cal;

    return false;
}

インラインonclick関数(ここではshowcalendar()関数)内からポップアップカレンダーを開始する適切な方法をたくさん試しました。ただし、新しいjscal2カレンダーのドキュメントでは、カレンダーの開始はバインディングメソッドのみをサポートしており、インラインonclickから呼び出される関数内から同じことを行う方法はありません。ドキュメントは次のとおりです-http://www.dynarch.com/projects/calendar/doc/trigger (およびパラメーターを確認してcontください。そのうちの1つは必須です)。私は同じことをするためにいくつかの汚い修正を適用し、その結果、プラグインによって自動的に行われるいくつかのことを行うためのコードを書かなければなりませんでした(例えば、選択された日付の表示=入力フィールドの日付、カレンダーの表示)。

于 2011-11-01T11:33:55.707 に答える