DatePicker에서 날짜를 동적으로 비활성화하는 방법-Knockout

Dawood Cloud

이 플러그인을 사용하고 있습니다 : http://eonasdan.github.io/bootstrap-datetimepicker/

날짜 목록 / 배열을로드하기 위해 서버에 Ajax 요청을 보내는 DropDown이 있으며 DateTime 선택기에서 해당 배열의 날짜 만 활성화하면됩니다. JSFiddle에서 비슷한 시나리오를 만들었습니다. http://jsfiddle.net/mdawood1991/sd2gmhop/12/

다음은 HTML입니다.

<div class="row">
    <div class="col-md-4">
        <select class="form-control" data-bind="options: Countries, optionsCaption: '-- Please Select --', value: SelecteItem"></select>
    </div>
    <div class="col-md-4">
        <label class="main-label">Date</label>
        <div class='input-group date'>
            <input type='text' class="form-control" data-bind="datepicker: SelectedDate" /> <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
        </div>
    </div>
    <div class="col-md-4"></div>
</div>

<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>

내 DateTime 사용자 지정 바인더 :

ko.bindingHandlers.datepicker = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        //initialize datepicker with some optional options
        var options = {
            format: 'DD/MM/YYYY HH:mm',
            defaultDate: valueAccessor()()
        };

        if (allBindingsAccessor() !== undefined) {
            if (allBindingsAccessor().datepickerOptions !== undefined) {
                options.format = allBindingsAccessor().datepickerOptions.format !== undefined ? allBindingsAccessor().datepickerOptions.format : options.format;
            }
        }

        $(element).datetimepicker(options);

        //when a user changes the date, update the view model
        ko.utils.registerEventHandler(element, "dp.change", function (event) {
            var value = valueAccessor();
            if (ko.isObservable(value)) {
                value(event.date);
            }
        });

        var defaultVal = $(element).val();
        var value = valueAccessor();
        value(moment(defaultVal, options.format));
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // when ViewModel is updated, update the DatePicker Control
        var thisFormat = 'DD/MM/YYYY HH:mm';

        if (allBindingsAccessor() !== undefined) {
            if (allBindingsAccessor().datepickerOptions !== undefined) {
                thisFormat = allBindingsAccessor().datepickerOptions.format !== undefined ? allBindingsAccessor().datepickerOptions.format : thisFormat;
            }
        }

        var value = valueAccessor();
        var unwrapped = ko.utils.unwrapObservable(value());

        if (unwrapped === undefined || unwrapped === null) {
            element.value = new moment(new Date());
            console.log("undefined");
        } else {
            element.value = unwrapped.format(thisFormat);
        }
    }
};

그리고 ViewModel :

function viewModel() {
    var self = this;

    self.Countries = ko.observableArray(['France', 'Germany', 'Spain']);
    self.SelecteItem = ko.observable();
    self.EnabledDates = ko.observableArray();
    self.SelectedDate = ko.observable(new Date());

    self.SelecteItem.subscribe(function () {
        self.EnabledDates = [];
        if (self.SelecteItem() == "France") {

            self.EnabledDates.push(new moment('Date(1431514972533)'));
            self.EnabledDates.push(new moment('Date(1431082972533)'));

        } else {
            self.EnabledDates.push(new moment(new Date()));
        }


    });
}

var testviewModel = new viewModel();

ko.applyBindings(testviewModel);

EnabledDates배열의 날짜 만 활성화하려면 어떻게해야합니까 ?

루이스

EnabledDates를 관찰하고 변경 사항을 달력에 적용하는 사용자 지정 바인딩을 사용할 수 있습니다.

활성화 된 날짜를 설정하는 방법에 대한 몇 가지주의 사항 :

1 변수에 간단한 배열을 할당하여 관찰 가능한 배열을 실제로 처리합니다.

self.EnabledDates = [];

해야한다:

self.EnabledDates([]);

2 배열에 요소를로드 할 때마다 해당 Observable의 모든 감시자 (계산 및 바인딩)를 트리거하므로 배열을로드하는 방법이 효율적이지 않습니다. 가장 좋은 방법은 임시 배열을 사용하여 활성화 된 모든 날짜를로드하는 것입니다. 그런 다음 해당 배열을 관찰 가능한 배열에로드합니다. 이렇게하면 한 번만 트리거됩니다.

       self.SelecteItem.subscribe(function () {
            var tempArray = [];
            if (self.SelecteItem() == "France") {

                tempArray.push(new moment('Date(1431514972533)'));
                tempArray.push(new moment('Date(1431082972533)'));

            } else {
                tempArray.push(new moment(new Date()));
            }
            self.EnabledDates(tempArray);

        });

이에 대한 자세한 내용은 http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha.html을 참조 하십시오.

마지막으로 사용자 지정 바인딩 :

ko.bindingHandlers.enableDisable = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    ko.bindingHandlers.enableDisable.update(element,valueAccessor);
    },
    update: function (element, valueAccessor) {
    var enabledDates =   valueAccessor()();
    //apply disabled dates
    $(element).data("DateTimePicker").enabledDates(enabledDates);
    }
}

여기 바이올린 : http://jsfiddle.net/luisvsilva/sd2gmhop/10/

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Datepicker로 미래 날짜를 비활성화하는 방법

분류에서Dev

주문에서 동적으로 생성 된 콤보 박스를 비활성화 / 활성화하는 방법

분류에서Dev

Angular JS에서 동적으로 유효성 검사를 활성화 / 비활성화하는 방법

분류에서Dev

JQuery Datepicker에서 이전 날짜를 비활성화하는 방법

분류에서Dev

datepicker에서 비활성화 된 날짜 수를 제거하는 방법

분류에서Dev

Django에서 양식의 입력 필드를 동적으로 비활성화 / 활성화하는 방법

분류에서Dev

Django에서 양식의 입력 필드를 동적으로 비활성화 / 활성화하는 방법

분류에서Dev

React datepicker에서 일을 동적으로 비활성화하는 방법

분류에서Dev

jquery datepicker의 일부 datepicker 값을 기반으로 미래 날짜를 비활성화하는 방법

분류에서Dev

Twitter Bootstrap : 선택한 날짜 이전의 날짜를 동적으로 비활성화하는 방법

분류에서Dev

Metro-UI에서 현재 시간을 기준으로 날짜를 비활성화하는 방법

분류에서Dev

날짜 배열에서 Angular Material Datepicker 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

odoo datepicker에서 현재 날짜 이후의 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

Observable에서 JQuery datepicker로 날짜를 전달하는 방법

분류에서Dev

div를 동적으로 비활성화 및 활성화하는 방법

분류에서Dev

ng-repeat 내에서 필터를 동적으로 비활성화하는 방법

분류에서Dev

Django에서 쿠키를 수동으로 비활성화하는 방법

분류에서Dev

jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

Bootstrap datepicker에서 이전 날짜를 비활성화하는 방법은 무엇입니까?

분류에서Dev

ViewModel WPF MVVM에서 DatePicker를 비활성화하는 방법

분류에서Dev

Windows 7에서 날짜를 고정하거나 비활성화하는 방법

분류에서Dev

datepicker에서 3 개의 날짜를 연속으로 검증하는 방법

분류에서Dev

Android에서 미래 날짜 선택기를 비활성화하는 방법

분류에서Dev

FSCalendar Libary Swift에서 특정 날짜를 비활성화하는 방법

분류에서Dev

Python 스크립트에서 Tornado Auth를 동적으로 활성화 / 비활성화하는 방법은 무엇입니까?

분류에서Dev

Kedro에서 로그를 비활성화하는 방법

분류에서Dev

Linux에서 NCQ를 (정말로) 비활성화하는 방법

Related 관련 기사

  1. 1

    Datepicker로 미래 날짜를 비활성화하는 방법

  2. 2

    주문에서 동적으로 생성 된 콤보 박스를 비활성화 / 활성화하는 방법

  3. 3

    Angular JS에서 동적으로 유효성 검사를 활성화 / 비활성화하는 방법

  4. 4

    JQuery Datepicker에서 이전 날짜를 비활성화하는 방법

  5. 5

    datepicker에서 비활성화 된 날짜 수를 제거하는 방법

  6. 6

    Django에서 양식의 입력 필드를 동적으로 비활성화 / 활성화하는 방법

  7. 7

    Django에서 양식의 입력 필드를 동적으로 비활성화 / 활성화하는 방법

  8. 8

    React datepicker에서 일을 동적으로 비활성화하는 방법

  9. 9

    jquery datepicker의 일부 datepicker 값을 기반으로 미래 날짜를 비활성화하는 방법

  10. 10

    Twitter Bootstrap : 선택한 날짜 이전의 날짜를 동적으로 비활성화하는 방법

  11. 11

    Metro-UI에서 현재 시간을 기준으로 날짜를 비활성화하는 방법

  12. 12

    날짜 배열에서 Angular Material Datepicker 날짜를 비활성화하는 방법은 무엇입니까?

  13. 13

    odoo datepicker에서 현재 날짜 이후의 날짜를 비활성화하는 방법은 무엇입니까?

  14. 14

    Observable에서 JQuery datepicker로 날짜를 전달하는 방법

  15. 15

    div를 동적으로 비활성화 및 활성화하는 방법

  16. 16

    ng-repeat 내에서 필터를 동적으로 비활성화하는 방법

  17. 17

    Django에서 쿠키를 수동으로 비활성화하는 방법

  18. 18

    jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

  19. 19

    jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

  20. 20

    jQuery datepicker에서 날짜를 비활성화하는 방법은 무엇입니까?

  21. 21

    Bootstrap datepicker에서 이전 날짜를 비활성화하는 방법은 무엇입니까?

  22. 22

    ViewModel WPF MVVM에서 DatePicker를 비활성화하는 방법

  23. 23

    Windows 7에서 날짜를 고정하거나 비활성화하는 방법

  24. 24

    datepicker에서 3 개의 날짜를 연속으로 검증하는 방법

  25. 25

    Android에서 미래 날짜 선택기를 비활성화하는 방법

  26. 26

    FSCalendar Libary Swift에서 특정 날짜를 비활성화하는 방법

  27. 27

    Python 스크립트에서 Tornado Auth를 동적으로 활성화 / 비활성화하는 방법은 무엇입니까?

  28. 28

    Kedro에서 로그를 비활성화하는 방법

  29. 29

    Linux에서 NCQ를 (정말로) 비활성화하는 방법

뜨겁다태그

보관