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

  • edwin maldonado

    edwin maldon

    28 Mart 2009
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006