无法使用 select2 读取 null 的 属性 'query'

Cannot read property 'query' of null with select2

我有一个 select2 下拉菜单,我根据 selected 在下拉菜单中禁用了某些 selection。因此,在 select 和 unselect 事件中,我获取填充下拉列表的数据,将禁用的 属性 设置为 true 用于任何需要它的选项并重建下拉列表。在 select 事件中,这工作正常。在 unselect 事件中它抛出一个错误:无法读取 属性 'query' of null。在 select2 库中,"this.dataAdapter" 在尝试访问 this.dataAdapter.query.

时为 null

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',
        })

下拉菜单内置于 angular 指令中。 select 事件中有效的代码是

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 事件中使用了相同的代码,除了我在 select2 对象上设置 containerCssClass 属性 并在此处抛出错误.

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');

更新

在进一步查看问题以确定错误原因后,我发现只有在显示的 selected 选项上单击 x 时才会出现错误。如果我打开下拉菜单并取消 select 选项,我不会收到错误消息。我试过 4.0.3、4.0.5 和 4.0.6 版本。

我在 select2 问题列表中发现了同样的问题,但已关闭且未解决。这似乎是一个错误,但在该线程中找到的解决方法是在更改数据之前调用打开事件。

$(elem).select2('open');
$(elem).select2({data: classes, width: 'auto', containerCssClass: scope.teacher.selectedClassIds.length > 0 ? '' : 'has-error_within required'}).trigger('change');