Handsontable Select2下拉选项更改下一行

时间:2015-12-12 17:50:12

标签: jquery jquery-select2 handsontable

请查看以下小提琴,了解正常工作:

http://jsfiddle.net/jepod675/2/

我的数据如下:

var countries = [{id:'1',text:'Country 1'},{id:'2',text:'Country 2'}];

var states = [];

states[1] = [{id:'1',text:'C1 State 1'},{id:'2',text:'C1 State 2'}];
states[2] = [{id:'3',text:'C2 State 1'},{id:'4',text:'C2 State 2'}];

产生问题的步骤:

  1. 选择国家1'在第一行和< C1状态1'在州列
  2. 选择'国家/地区2'在下一行。
  3. 请注意,值已更改为“C1状态1'到1(国家的id而不是名字。

    您还可以在第一行看到State选项(参见屏幕截图)。

    enter image description here

    我想handsontable每列维护一个选项实例。

    开发人员在https://github.com/trebuchetty/Handsontable-select2-editor/issues/15#issuecomment-144553584

    的评论
      

    我不确定如何解决这个问题。 Handsontable保持一个   每列实例有效。您可能需要覆盖此行为,   我认为这是可能的,但会有性能损失   与此相关联。您可能需要验证其他列   打开编辑器之前的值,以便您可以替换   具有正确列表的选择列表。

    我正在寻求如何解决这个问题的帮助?

1 个答案:

答案 0 :(得分:1)

由于您使用的是select2编辑器,因此编辑器具有回调方法“onBeginEditing”

$("#hot").handsontable({           
        onBeginEditing: function () {
            var activeEditor = instance.getActiveEditor();
            var selectedRow = activeEditor.cellProperties.row
            var selectedColumn = activeEditor.cellProperties.col;
            if ( selectedColumn == 3) {
                var tester = instance.getDataAtCell(selectedRow, 14);
                var filterlist = [];
                var optionsList = activeEditor.options.data;
                for (var index = 0; index < optionsList.length; index++) {
                    if (tester == optionsList[index].tester) {
                        filterlist.push(optionsList[index]);
                    }
                }
                activeEditor.options.data = filterlist;
            }
        });