2014-04-24 16 views
5

Şu anda Knockout'ta çok sayıda ağır uygulama yapıyorum. Uygulamamda üç tür sayı var: yüzdeler, ondalık sayılar ve büyük sayılar ve her tür için özel bağlayıcı işleyicileri var.Knockout bir bağlayıcı işleyiciyi paylaşıyor

Girdiler için, her bir tuşa basmayı, bir sayı girildiğinden emin olmak için okuyan bir sayı doğrulama bindingHandler oluşturdum. (app CSS animasyonlar ve şeyler gösterişli sınır var - bu sadece örnek aşağı soyulmuş bir çıplak kemikler).

Şimdi, girdilerin doğrulama denetimlerini ve sayı biçimlendirmesini gerçekleştirmesi için, aşağıdaki klavyede düzgün görebildiğiniz şekilde değişkeni iki kez bağladım.

<input data-bind="number: testdata, percentage: testdata"> 

Bu gereksiz yere benim HTML biçimlendirmesi şişkinlik ve aynı zamanda her iki işleyicileri tetiklemek için daha düzenli bir yolu olmalı ki düşünüyorum.

Sorumu: Sayı doğrulama işleyicilerinin içinde paylaşılabilecek/dahil edilebilecek bir işlev olarak sayı doğrulama komut dosyası oluşturmak mümkün mü? Javascript'i şişirmeden mi?

Knockout'ta hala nispeten yeni biriyim, bu yüzden hala sınırları olduğundan emin değilim.

bakınız Fiddle: http://jsfiddle.net/axV6S/1/

cevap

2

Evet, sadece kendi fonksiyonu içine sayı init dışarı çıkarabilir, yani bu değiştirin:

ko.bindingHandlers.number = { 
    init: function (element) { 
     /* ... */ 
    } 
}; 

bu işe:

var numberInit = function(element) { 
    /* ... */ 
}; 

Hemen çağrı Diğer initinizden şu şekilde:

init: function(element, valueAccessor) { 
    numberInit(element); 
    /* ... */ 
} 

veya hakkı 'bu' bağlamı tutmak istiyorsanız:

init: function(element, valueAccessor) { 
    numberInit.apply(this,arguments); 
    /* ... */ 
} 
0

Sen nakavt içinde işlevsellik yerleşik bir sürü çoğaltarak edilir. Görüntü modelinizi oluştururken, model özellikleriniz için kısıtlamalar tanımlayabilirsiniz. Eğer sayısal verilerin bir sürü için bunu yapabilirsiniz:

this.FieldName = ko.observable().extend({ pattern: regex }); 

Bu metin alanları sınırlamak, sen basılmasını için dinlemek ve bir işlem yapmanıza gerek yoktur nd a. Nakavt, bunu sizin için arka planda yapar! http://knockoutjs.com/documentation/extenders.html

+1

bu [Nakavt-Doğrulama] (https://github.com/Knockout dayanıyor unutmayınız: http://mikedormitorio.azurewebsites.net/BlogPost/the-native-validation-rules-of-knockout-validation

Bu da çok faydalı bir okunur:

fazla örnek için bu göz at Harici bir kütüphane olan ve Knockout Core'un bir parçası olmayan -Kontrib/Knockout-Validation). – janfoeh