javascript - 无法使用 select2 读取 null 的属性“查询”
问题描述
我有一个 select2 下拉列表,我在其中根据选择的内容禁用下拉列表中的某些选择。因此,在选择和取消选择事件中,我获取填充下拉列表的数据,将 disabled 属性设置为 true 以获取任何需要它的选项并重建下拉列表。在选择事件上,这工作正常。在取消选择事件上,它会引发错误:无法读取 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',
})
下拉菜单内置在角度指令中。在 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');
在取消选择事件中,使用相同的代码,但我在 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');
更新
在查看了更多尝试确定错误原因的问题后,我发现仅在单击显示的所选选项上的 x 时才会发生错误。如果我打开下拉菜单并取消选择该选项,我不会收到错误消息。我已经尝试使用 4.0.3 和 4.0.5 和 4.0.6 版本。
解决方案
我在 select2 问题列表中发现了同样的问题,但已关闭且未解决。这似乎是一个错误,但在该线程中找到的解决方法是在更改数据之前调用 open 事件。
$(elem).select2('open');
$(elem).select2({data: classes, width: 'auto', containerCssClass: scope.teacher.selectedClassIds.length > 0 ? '' : 'has-error_within required'}).trigger('change');
推荐阅读
- asp.net - 在 ASP.NET 网站项目中使用 64 位引用 - 设计时问题
- mysql - 嵌入式 Debezium。试图查看偏移文件的格式。不工作
- git - 不小心推送了一个没有更改的现有分支,现在 Bitbucket 不允许我创建拉取请求或撤消
- javascript - 如果没有操作,我是否需要使用 HTML 表单标签?
- jquery - 为什么我无法在这里触发“更改”事件?
- c++ - 有没有办法让函数成为参数?
- android - 单击recyclerview的特定行时如何显示图像
- flutter - Flutter 拖拽可以有动态端点吗?还是只是一个预定义的目标?
- sql - 审核日志未更新
- netty - 如何在 Project Reactor Netty HTTP Server 中有条件地设置状态码?