Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Добавить строку с NULL для ComboBox (https://javascript.ru/forum/extjs/65948-dobavit-stroku-s-null-dlya-combobox.html)

Sogl 17.11.2016 04:06

Добавить строку с NULL для ComboBox
 
Всем привет!

Столкнулся недавно с тривиальной задачей, для которой так и не нашел нормального решения.
Мне нужно добавить в Комбобокс запись с id: NULL, чтобы можно было очищать связи между сущностями в БД.

Пока что сделал через событие load:
store: {
    type: 'positions',
    pageSize: 0,
    listeners: {
        load: function(store) {
            var rec = { id: null, value: 'Не выбрано', valueEn: 'Не выбрано'};
            store.autoSync = false;
            store.insert(0, rec);
        }
    }
},


Строка появляется, НО...далее идут проблемы.

Проблема 1. Несмотря на то, что в Store мы пишем NULL, запись создается с id равном Positions-1 (2, 3 итп) и на сервер уходит именно так, если не соблюсти ряд условий. Как сделать по умолчанию NULL я так и не нашел. Пробовал для id целых 3 параметра по очереди без успеха:
defaultValue: null,
allowNull: true,
persist: false


Проблема 2. Если в главной модели нет внешнего ключа, который мы и обновляем, то сервер выдает ошибку SQL:
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'Positions-1' for column 'positionId'


Запись новая при этом выбирается нормально из Combobox!

Если мы объявим таки наш ключ в модели вот так:
{
    type: 'int',
    name: 'positionId'
},


То мы так и не сможем выбрать новую запись из Combobox! Никак, она просто обнуляется после щелчка и поле красное.

А если мы пропишем связь:
{
    type: 'int',
    name: 'positionId'
    reference: 'Positions'
},


То новая строка выбирается только на второй раз! :blink:
Первый раз кликаем и поле просто очищается, при этом становится красным, т к у нас allowBlank: false. На второй раз можно выбрать и только потом уже нажать "Сохранить". На сервер уйдет NULL при этом как нам и нужно.

Это какое-то очень сильное колдунство! Искал через гугл и по форуму Сенчи — вопрос этот задается еще с 3.х версии и даже в 6.2 нет до сих пор нормального решения.

Кто сталкивался и как побеждал?

p.s. Тема на форуме Сенчи:
https://www.sencha.com/forum/showthr...ue-to-combobox

Pavel M. 17.11.2016 12:55

никогда в store не делал, чтобы idProperty было равно null

если нужно было использовать именно {id: null, value: 'Не выбрано'} для пустого значения комбобокса,
то в store делал, например, idProperty: 'uuid'


Часовой пояс GMT +3, время: 10:40.