2014-09-24 1 views
5

Учитывая, что SlickGrid, как я могу вызвать все ячейки во всех строках, подлежащих проверке? Или, возможно, использовать JavaScript для запуска проверки того, как ячейка будет проверена (что я могу использовать для всех ячеек во всех строках)?Проверка всех ячеек во всех строках SlickGrid

В случае использования пользователь должен отредактировать каждую ячейку и предоставить что-то иное, чем по умолчанию, и мы хотим убедиться, что они сделали это и Мы хотим показать поведение ошибки проверки по умолчанию, если у них нет ,

В настоящее время выясняется, что валидация происходит только в полях, которые редактируются.

+0

Используете ли вы какие-либо другие структуры, которые вы могли бы делегировать эту часть «работы»? Как вы заметили, проверка Slickgrid по умолчанию ограничивается только функцией 'validate'' редактора', которая передает только значение в качестве параметра. Вы можете изменить источник для достижения желаемого поведения, но лично я бы делегировал этот тип проверки на другую структуру (то есть [Проверка нокаута] (https://github.com/Knockout-Contrib/Knockout-Validation)) ... хотя я частично отношусь к этой комбинации, поскольку у меня есть опыт работы с ней. – Origineil

+0

Нет, я бы предпочел придерживаться встроенной проверки SlickGrid. – jlarson

+0

Я начал демонстрацию (http://jsfiddle.net/origineil/nLpzjL32/) полной проверки сетки. Кнопка 'validate' будет запускать любой столбец, определяемый' validator', против каждого ввода данных. * Поведение ошибки проверки по умолчанию * не позволяет закрыть поле ввода редактора, поэтому я добавил мигание ячейки, чтобы проиллюстрировать, где вам нужно будет выполнить требуемую обработку отказа. Во-вторых, я не знаю, что такое значение * default *, поэтому я использовал только числа с требованием, чтобы они были '> 0'. – Origineil

ответ

2

Как отмечалось, проверка Slickgrid по умолчанию ограничивается функцией validateeditor, которая проверяет наличие любого доступного validator, передавая только значение в качестве параметра. Чтобы предоставить дополнительную контекстуальную информацию, требуется специальный редактор или, более конкретно, специальная функция проверки.

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 }; 
}; 

Каждый столбец будет тогда нужен валидатор, в течение которого значение по умолчанию будет проверяться против либо новое значение исходя из редактора или существующее значение наряду с любыми другими необходимыми аспектами проверки.

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} 
} 

Для проверки всей сетки предлагается метод проверки, который выполняет итерацию по каждой строке, просматривая каждый столбец для валидатора. На основе результатов валидации создается реляционное сопоставление rowIndex -> collection of failures, которое должно быть передано в исходное событие onValidationError. Это позволяет подписке обрабатывать уведомления пользователей о наличии ошибок. Кроме того, результаты проверки могут быть использованы для сбоев типа по 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