2011-12-28 15 views
6

iPad'de çalışması amaçlanan Web uygulamasındaki HTML5 giriş denetimlerini bağlamak için Knockout JS kitaplığını kullanıyorum (iOS5, Safari 5.1). Bağlama, metin gibi giriş türleri için iyi çalışır, ancak tarih için değil, seçer. Tarih seçiciden bir tarih değeri seçtikten sonra, değer viewModel özelliğine bağlı değildir (aslında kaydedilmiyor).Knockout JS: Etkinliği iPad'de HTML5 tarihi için tetiklemiyor

Bu, HTML'm nasıl görünüyor.

<input id="dob" name="dob" type="date" data-bind="value: dob" /> 

Bir değişiklik olay işleyicisini başlattığım özel bir ciltleme ile çalışmayı denedim. hatta o olay ateş değil, Garip

<input id="dob" name="dob" type="date" data-bind="datePicker: dob" /> 

-

ko.bindingHandlers.datePicker = { 
    init: function (element, valueAccessor) { 
     ko.utils.registerEventHandler(element, "change", function() { 
      var observable = valueAccessor(); 
      observable($(element).val()); 
     }); 
    }, 
    update: function (element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     $(element).val(value); 
    } 
}; 

HTML kodunun değiştirilmesi. Her iki senaryoda da bağlamanın Windows XP'de Opera ve Safari tarayıcılarında mükemmel şekilde gerçekleştiğini lütfen unutmayın.

Nihayetinde, özel bağlamadaki 'değişiklik' yerine 'bulanıklaştırma' olayını kullanarak sorunumu çözdüm. Şimdi olay işleyici aranıyor ve değeri tarih kontrolünden el ile ayarlıyorum.

Şimdi benim sorum şu ki, doğru bir şekilde yapmadığım bir şey değil mi? O zaman neden HTML5 tarih denetiminin değişiklik olayı, varsayılan olarak mı yoksa özel ciltleme yoluyla mı ateş etmiyor? Tarih kontrolünün olması gerektiği gibi çalışmasını istiyorum.

cevap

13

Knockout bakış açısıyla yanlış bir şey yapmıyorsunuz. Bu olaylar gerçekten test edilmek ve biraz araştırma yaparak anlatabildiğimden (Resimde bile Knockout olmadan) kovulmuyor.

Sen yaparak özel bir bağlama önleyebilirsiniz: Ben ancak benim durumumda, benzer bir sorun vardı

<input type="date" data-bind="value: myDate, valueUpdate: 'blur'" />

+0

Teşekkürler @RP! Bu bir çekicilik gibi çalıştı. Müşteri tarafından bulanıklık olayının bağlayıcısından yaptığım şey, valueUpdate tarafından yapıldı. İyi öğrenme. –

+0

Bu da Blackberry mobil için mükemmel çalıştı. Teşekkürler. – johnwards

4

, hatta bulanıklık olay aslında ateş değildir. Bu yüzden inputUpdate özelliği ile giriş olayını kullandım ve problemi çözdüm.

İlgili konular