-1

これは複雑すぎるかもしれませんが、「ResourceScheduleType」が何らかの数値に等しいかどうかを確認する必要がある次のような状況があります。コード内のコメントは、私がやろうとしていることを最もよく表していると思います。何らかの理由で、「一致する」変数が必要なプロパティを提供しません.jQuery grep ピースの使用もやめたいと思います。

class MyCalendarVM {
    CalendarPoints: MyCalendarPoints[];
}

class MyCalendarPoints {
    ResourceScheduleType: number;
    aDate: string;
}

class MyType {
    MyName: string;
}


$(document).ready(() => {
    $.get("/Calendar/GetMonthCalendar", null, (data: MyCalendarVM) => {
        if (data.CalendarPoints.length == 0) {
            (<any>$('#date')).datepicker();
        } else {
            $(<any>data.CalendarPoints).each(
                (<any>$("#date")).datepicker({
                    beforeShowDay: function (date) {
                        var result = new Array(true, '', null);
                        var matching = <MyCalendarPoints[]>$.grep(data.CalendarPoints, function (event) {
                            return event.Date.valueOf() === date.valueOf();
                        }, false);

                        //TODO: make determination for blue or yellow dot
                        if (matching.length) {
                            var classes = "";

                            // if matching.ResourceScheduleTypeId == 3
                            // classes += "yellowDot";
                            // if matching.ResourceScheduleTypeId == 1 || 2 || 9
                            // classes += " blueDot";
                            result = [true, classes, null];
                        }
                        return result;
                    },
                    onSelect: function (dateText) {
                        var date,
                            selectedDate = new Date(dateText),
                            i = 0,
                            event = null;

                        while (i < data.CalendarPoints.length && !event) {
                            date = data.CalendarPoints[i].aDate;

                            if (selectedDate.valueOf() === date.valueOf()) {
                                event = data.CalendarPoints[i];
                            }
                            i++;
                        }
                        if (event) {
                            alert(event.Title);
                        }
                    }
                })
            );
        }
    });
});
4

2 に答える 2

1

配列のように見えるため、特定のオブジェクトmatchingのプロパティを使用できるようにするには、インデックスでアクセスする必要があります。MyCalendarPoints

matching[0].ResourceScheduleTypeId // MyCalendarPoints

いいえ

matching.ResourceScheduleTypeId // MyCalendarPoints[]

私はあなたのキャストを見てこれを集めました:

<MyCalendarPoints[]>
于 2012-11-06T14:53:32.807 に答える
1

jQuery と jQuery-UI の定義を追加すると、すべてのキャストを取り除くことができますany

///<reference path='jquery-1.8.d.ts'/>
///<reference path='jqueryui-1.9.d.ts'/>

あなたも変える必要があります

$(<any>data.CalendarPoints).each(

$(data.CalendarPoints).each(() =>

.each()関数を期待しているので。

.d.tsファイルは、Boris Yankov の githubにあります。

于 2012-11-06T22:53:24.650 に答える