Всем привет!
Столкнулся недавно с тривиальной задачей, для которой так и не нашел нормального решения.
Мне нужно добавить в Комбобокс запись с 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