У меня есть раскрывающийся список select2, в котором я отключаю определенные варианты выбора в раскрывающемся списке в зависимости от того, что было выбрано. Итак, в событиях выбора и отмены я беру данные, которые заполняют раскрывающийся список, устанавливаю для свойства disabled значение true для всех параметров, которые в нем нуждаются, и перестраивает раскрывающийся список. На выбранном событии это работает нормально. При событии unselect выдается ошибка: Не удается прочитать свойство 'query' из null. В библиотеке select2 «this.dataAdapter» является нулевым, когда он пытается получить доступ к this.dataAdapter.query.
Код инициализации для выпадающего списка select2:
$(elem).select2({
data: $.map(scope.teacher.classes, function (cls) {
if (!found && cls.selected) {
scope.teacher.isTargeted = true;
scope.teacher.initTargeted = true;
found = true;
}
cls.id = cls.classId;
cls.text = cls.className;
if (cls.selected) {
scope.teacher.selectedClassIds.push(cls.classId);
scope.teacher.selectedClasses.push(cls);
}
return cls;
}),
multiple: true,
minimumResultsForSearch: Infinity,
width: 'auto',
})
Раскрывающийся список построен в угловой директиве. Код, который работает в событии выбора:
var classes = scope.teacher.classes.map(function(cls) {
cls.id = cls.classId;
cls.text = cls.className;
cls.selected = scope.teacher.selectedClassIds.indexOf(cls.classId) > -1;
cls.disabled = scope.teacher.selectedClassIds.length == 0 ? false : cls.semester == semester ? false : true
return cls;
});
$(elem).select2().empty()
$(elem).select2({data: classes, width: 'auto'}).trigger('change');
В событии unselect используется тот же код, за исключением того, что я устанавливаю свойство containerCssClass для объекта select2, и здесь выдается ошибка.
var classes = scope.teacher.classes.map(function(cls) {
cls.id = cls.classId;
cls.text = cls.className;
cls.selected = scope.teacher.selectedClassIds.indexOf(cls.classId) > -1;
cls.disabled = scope.teacher.selectedClassIds.length == 0 ? false : cls.semester == semester ? false : true
return cls;
});
$(elem).select2().empty()
$(elem).select2({data: classes, width: 'auto', containerCssClass: scope.teacher.selectedClassIds.length > 0 ? '' : 'has-error_within required'}).trigger('change');
UPDATE
Посмотрев на проблему больше, пытаясь определить причину ошибки, я обнаружил, что ошибка возникает только при нажатии x на отображаемой выбранной опции. Если я открою выпадающий список и откажусь от выбора опции, я не получу сообщение об ошибке. Я пробовал с версией 4.0.3 и 4.0.5 и 4.0.6.