SORU
7 Temmuz 2011, PERŞEMBE


jQuery UI datepicker KnockoutJS tarafından yakalanmış değil, olay değiştirme

JQuery UI ile KnockoutJS kullanmaya çalışıyorum. Bir datepicker bağlı giriş elemanı var. Şu anda knockout.debug.1.2.1.js koşuyorum ve değiştirme olayı hiç Nakavt tarafından yakalanır gibi görünüyor. Eleman bu gibi görünüyor:

<input type="text" class="date" data-bind="value: RedemptionExpiration"/>

Hatta valueUpdate olay türü değişiyor ama boşuna denedim. Değeri hemen önce Krom nedenleri gibi focus bir olay gibi görünüyor, ama YANİ yok.

Bazı Eleme yöntemi "bütün bağları"? rebinds var Ben teknik olarak sadece değeri sunucuya geri göndermeden önce değişti lazım. Geçici çözüm böyle yaşayabilmek için.

Sorun datepicker suçu olduğunu düşünüyorum, ama bunu nasıl düzelteceğimi çözemedim.

Herhangi bir fikir?

CEVAP
7 Temmuz 2011, PERŞEMBE


JQuery UI datepicker için özel bir okuma/Tarih ile nesneleri API datepicker tarafından sağlanan kullanarak yazma bağlama kullanmak en iyisidir bence.

Bağlama (benim cevabım here) gibi görünebilir:

ko.bindingHandlers.datepicker = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        //initialize datepicker with some optional options
        var options = allBindingsAccessor().datepickerOptions || {},
            $el = $(element);

        $el.datepicker(options);

        //handle the field changing by registering datepicker's changeDate event
        ko.utils.registerEventHandler(element, "changeDate", function () {
            var observable = valueAccessor();
            observable($el.datepicker("getDate"));
        });

        //handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            $el.datepicker("destroy");
        });

    },
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            $el = $(element);

        //handle date data coming via json from Microsoft
        if (String(value).indexOf('/Date(') == 0) {
            value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
        }

        var current = $el.datepicker("getDate");

        if (value - current !== 0) {
            $el.datepicker("setDate", value);
        }
    }
};

Bu gibi kullanabilirsiniz:

<input data-bind="datepicker: myDate, datepickerOptions: { minDate: new Date() }" />

JsFiddle örnek burada: http://jsfiddle.net/rniemeyer/NAgNV/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010
  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012