2014-09-24 15 views
5

tüm satırlarda tüm hücreleri doğrulanıyor? Ya da belki de bir kez hücrenin onaylanması için (eğer tüm satırlardaki tüm hücrelere karşı kullanabilirim?) Tetiklemek için JavaScript'i kullanabilir miyim?tüm satırlara <em>tüm</em> hücreleri doğrulanması nasıl tetikleyebilir, bir SlickGrid Verilen SlickGrid

Kullanım durumu, kullanıcının her bir hücreyi düzenlemesi ve varsayılan değerden başka bir şey sağlaması gereken bir yerdir ve biz, ve yaptıklarından emin olmak istiyoruz, eğer bunlar yoksa, varsayılan doğrulama hatası davranışını göstermek istiyoruz .

Şu anda doğrulama sadece düzenlenebilir alanların olur anlaşılmaktadır. gözlendiği gibi

+0

Eğer için "iş" bu bölümünü temsilci olabilecek diğer çerçeveler kullanıyor musunuz tarafından stil arızaları için kullanılabilir? Gözlemlediğiniz gibi, Slickgrid'in varsayılan validasyonu sadece bir parametre olarak sadece değeri geçen bir editörün 'validate' fonksiyonu ile sınırlıdır. İstenen davranışı elde etmek için kaynağı değiştirebilirsin, ama ben şahsen ben bu tür bir geçerliliği başka bir çerçeveye devredeyim (yani [Knockout Doğrulama] (https://github.com/Knockout-Contrib/Knockout-Validation)) ... Bununla birlikte, bu deneyime sahip olduğum için, bu kombinasyonun bir parçasıyım. – Origineil

+0

Hayır, SlickGrid doğrulamada takılı kalmayı tercih ederim. – jlarson

+0

Tam ızgara doğrulama (http://jsfiddle.net/origineil/nLpzjL32/) [bir demo ait] ettik. 'Validate' düğmesi, her veri girişi için "validator" tanımlı herhangi bir sütunu çalıştıracaktır. * Varsayılan doğrulama hatası davranışı * bir editör giriş alanının kapanmasına izin vermemekte, bu yüzden istediğiniz arıza işlemeyi gerçekleştirmeniz gereken yerleri göstermek için hücre yanıp sönmeyi ekledim. İkincisi, bir * varsayılan * değerinin ne olacağını bilmiyorum, bu yüzden sadece '' 0 'olması gerekliliğine sahip numaraları kullandım. – Origineil

cevap

2

, Slickgrid varsayılan doğrulama parametre olarak yalnızca bir değer boyunca geçen mevcut herhangi bir validator denetleyen bir editor arasında validate fonksiyonu ile sınırlıdır. Ek bağlamsal bilgi sağlamak için, özel bir düzenleyici veya daha özel olarak bir özel doğrulama işlevi gereklidir.

this.validate = function() { 
    if (args.column.validator) { 
     args.newValue = $input.val() 
     var validationResults = args.column.validator(args); 

     if (!validationResults.valid) { 
      return validationResults; 
     } 
    } 

    return { valid: true, msg: null }; 
}; 

Her sütun varsayılan değer ile karşılaştırılır edileceği içinde doğrulayıcı gerekir ya editör gelen yeni bir değer veya herhangi bir diğer gerekli doğrulama yönleri ile birlikte mevcut değer.

var Validator = function(args) { 

    //validate the existing value or the incoming editor value 
    var value = args.newValue ? args.newValue : args.item[args.column.field] 
    var result = value > 0 
    return {valid: result} 
} 

tüm kılavuz her satır üzerinde dolaşır bir doğrulayıcı için her sütun bakan bir doğrulama yöntemi temin doğrulamak için. doğrulama sonuçlarına dayanarak, rowIndex -> collection of failures bir ilişkisel haritalama yerli onValidationError olay geçirilecek inşa edilmiştir. Bu, bir abonelik için hataların varlığını bildiren kullanıcı bildirimine izin verir. Buna ek olarak, doğrulama sonuçları providing specific metadata to the grid

var validateColumns = function(args){ 

var failures=[]; 

for (c in columns) { 
    var column = columns[c] 
    if (column.validator) { 
     if(!column.validator({row: args.row, item: args.item, column: column}).valid){ 
     failures.push({columnIndex: c, column: column, rowIndex: args.row, item: args.item}) 
     } 
    } 
} 
return failures; 
} 

grid.validate = function() { 
    var rowFailures = {} 
    for (r in data) { 
    //ignore our metadata provider (if applicable) 
    if(r == 'getItemMetadata'){continue;} 

    var failures = validateColumns({item: data[r], row: r}) 
    if(failures.length > 0){ 
     rowFailures[r] = failures; 
    } 
    } 

    if(Object.keys(rowFailures).length > 0){ 
    grid.onValidationError.notify({"rowFailures": rowFailures}, new Slick.EventData()) 
    } 
    } 

Fiddle

İlgili konular