ruby-on-rails 制表程序和select2标题筛选器

z9ju0rcb  于 2023-02-26  发布在  Ruby
关注(0)|答案(1)|浏览(100)

堆叠:

  • Ruby-2.7.6
  • 轨道-6.1.5
  • 制表机-5.4.3
  • jquery-铁路宝石-4.4.0
  • jquery-用户界面-铁路gem-6.0.1
  • 选择2个导轨gem-3.5.11

为了使我们定制的和已经建立的select2字段能够用于数据过滤,我尝试使用select2作为定制的headerFilter(如本示例/answer https://stackoverflow.com/a/53622648所示),select字段及其选项确实会出现,但是当选择一个项目时什么也不会发生,也不会触发任何select2事件。

    • 预期:**用select2库替换默认的内置列表编辑器,并将其用作headerFilter。
    • 尝试:**从后端获取select字段所需的项,将这些项提供给select2构建器,然后将整个select2字段插入headerFilter
    • 结果:**Select2搜索字段确实出现并按预期工作(字段可见,选项可见),直到选择了任何项目。选择后,没有任何React,也没有触发任何select2事件,因此无法使用select2应用headerFiltering。此外,通过单击所选的select2项目,我确实在控制台中收到警告:

[Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.chromestatus.com/feature/5745543795965952
色谱柱说明:

{
  title: 'Items',
  field: 'item_name',
  headerFilter: selectEditor,
  headerSort: false
},
var selectEditor = function(cell, onRendered, success, cancel, editorParams){

  //create input element to hold select2
  var container = document.createElement("span");
  var editor = document.createElement("input");
  container.append(editor);

  onRendered(function(){
    $(editor).select2({
      data: [{text: 'hi', value: '1'}],
      multiple: false,
      width: '100%',
      allowClear: true
    });

    $(editor).on('change', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('change.select2', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('select2:select', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('blur', function (e) {
      console.log('blurred');
      cancel();
    });

    $(editor).on('click', function (e) {
      console.log('clicked');
      cancel();
    });
    container.focus();
  });
  return container;
}
slmsl1lt

slmsl1lt1#

这是因为在列表中选择一个元素会导致blur事件被触发,从而取消编辑。
作为测试,尝试注解掉代码中的blur事件,看看选择现在是否有效。
如果ti这样做了,那就是你的问题了,你需要用一个更复杂的方式来管理blur,你是对的,你需要取消blur,但是你应该检查blur事件的起源,看看它是否来自select2编辑器列表元素,如果是这样的话就忽略它。
或者,您可以使用内置的list编辑器,它将为您完成所有这些工作https://tabulator.info/docs/5.4/edit#editor-list

相关问题