Использование свойства валидаторов EXTjs Model в сетке - PullRequest
0 голосов
/ 31 августа 2011

У меня довольно стандартная сетка -> Магазин -> Архитектура модели в Extjs4.Требование состоит в том, что пять из моих восьми полей в каждой записи являются обязательными, поэтому я решил использовать конфигурацию модели valdiations:

    Ext.define('TransferRecord', { extend: 'Ext.data.Model',
    fields: transferRecordFields,
    idProperty: 'RID',
    validations: [
    { type: 'presence', field: 'FNAME' },
    { type: 'presence', field: 'LNAME' },
    { type: 'presence', field: 'GENDER' },
    { type: 'presence', field: 'DOB' },
    { type: 'presence', field: 'TRANSFER_TYPE'}]
});

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

В идеале я хотел бы выделить поля с ошибками, чтобы пользователь знал, какие из них все еще нуждаются в значениях (и наоборот - очиститеПодсветка, когда они в порядке).Я знаю, что если я вызываю record.validate для каждой записи, я могу получить список объектов ошибок, но я не уверен, как преобразовать эту информацию в ячейку в строке X, поле 'FNAME' должно изменить цвет (илилучший способ найти эту ячейку, чтобы я мог применить изменения).

Мне кажется, что я упускаю что-то простое - возможно, есть API, который уже помогает мне здесь, но я не могу его найти.

1 Ответ

1 голос
/ 31 августа 2011

Я обнаружил, что пример пользовательского рендерера в примерах EXTjs неполон - что рендеринг принимает много дополнительных параметров, которые не был показан в примере.

Мне удалось заставить его работать,определяя следующую функцию рендерера и назначая ее каждому столбцу:

    function mandatoryColumnRenderer(value, metaData, record, rowIndex, colIndex, store) {
        var errors = record.validate();
        if (errors.getByField(this.columns[colIndex].dataIndex).length > 0) {
            metaData.style = 'background-color: Gold;'
        }
        return value;
} 
...