Показать сообщение отдельно
  #1 (permalink)  
Старый 17.11.2016, 04:06
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Добавить строку с 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'
},


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

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

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

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

Последний раз редактировалось Sogl, 17.11.2016 в 04:20.
Ответить с цитированием