EXTJS Проблема с нулевыми значениями в магазине - useNull: не влияет --Help? - PullRequest
7 голосов
/ 01 ноября 2010

Люди,

У меня есть компонент со списком, поддерживаемый JSONStore. Данные, загруженные в хранилище, возвращают нулевое значение для поля со списком Значение является int. Процесс декодирования JSON преобразует нулевое значение в ноль; вызывающий сбой рендера в комбинированном ящике при попытке найти pk, ноль, которого нет в его резервном хранилище.

Я нашел параметр useNull: config для объектов data.Field, обновлён до версии 3.3.0 Final и установил в качестве значения int для выпадающего списка значение useNull: true. К сожалению, это никак не влияет. Декодированное значение все еще изменяется с нуля на ноль.

Есть ли какие-либо идеи о том, как не устанавливать поле в ноль, когда данные для поля JSON равны нулю?

Вот картинка того, что происходит. Обратите внимание на данные: значение равно нулю, но значение JSON равно нулю.

Спасибо!

(gah! Stoopid репутация <10, поэтому я не могу напрямую опубликовать фото. Посмотреть его здесь: <a href="http://gordonjl.com/files/json_null_pic.png" rel="noreferrer"> debug pic )

Также, вот конфигурация поля моего магазина:

  fields: [
        {name:"id", type:"int"},
        {name:"occurenceDate", dateFormat: 'Y-m-d\\TH:i:s', type:"date"},
        {name:"docketNumber", type:"string"},
        {name:"courtLocationId", type:"int", useNull:true},
        {name:"assignedOfficerId", type:"int", useNull:true},
        {name:"primaryIncidentTypeId", type:"int", useNull:true},
        {name:"secondaryIncidentTypeId", type:"int", useNull:true},
        {name:"tertiaryIncidentTypeId", type:"int", useNull:true},
        {name:"incidentLocation", type:"string"},
        {name:"summary", type:"string"},
        {name:"personalItemsSeized", type:"string"},
        "supplements",
        "parties",
        "judgeIds"
    ]

Ответы [ 4 ]

3 голосов
/ 02 ноября 2010

Попробуйте использовать его без объявления типа. Вы также можете использовать метод конвертации:

{
    name: "primaryIncidentTypeId", 
    convert: function(value, row) {
        return (value == null) ? null : parseInt(value);
    }
}
0 голосов
/ 25 января 2017

Вы должны использовать defaultValue: null ,useNull : true, так как значение по умолчанию для целого типа равно нулю

Пример:

{name:"primaryIncidentTypeId", type:"int", useNull:true , defaultValue: null },
0 голосов
/ 17 декабря 2010

Это также меня достало, вы можете дополнительно переопределить функцию преобразования типа в Ext.data.Types, чтобы разрешить нулевые значения для полей целочисленного типа.

Ext.data.Types.INT.convert = function(v){
  v = parseInt(String(v).replace(Ext.data.Types.stripRe, ''), 10);
  return isNaN(v) ? null : v;
};
0 голосов
/ 04 ноября 2010

О ширине комбо: я обычно использую

defaults: {
    anchor: '100%'
}

в декларации формы и не имеет проблем с шириной.

Разве нельзя предоставить функции преобразования со стороны сервера вместе со всеми другими метаданными?

И я все еще использую ExtJS 3.2 - нет необходимости в каких-либо новых ошибках в производственных системах:)

...