Slickgrid,带有下拉选择列表的列?

Sam*_*Sam 23 javascript jquery slickgrid tablecolumn

嗨,我想知道是否有人知道是否可以将slickgrid中的列定义为下拉选择列表.如果不是,那些对slickgrid有一定经验的人知道我应该如何添加这个选项吗?

谢谢

Mat*_*ijs 38

您可能不希望为每个选项范围创建一个新的选择编辑器.您也可能事先不知道所有选项值的范围.

在这种情况下,您需要在选择类型编辑器中提供灵活的选项范围.为此,您可以为列定义添加额外选项(例如,调用选项),如下所示:

 var columns = [
  {id:"color", name:"Color", field:"color",  options: "Red,Green,Blue,Black,White", editor: SelectCellEditor},
  {id:"lock", name:"Lock", field:"lock",  options: "Locked,Unlocked", editor: SelectCellEditor}
 ]
Run Code Online (Sandbox Code Playgroud)

并访问args.column.options在您自己的SelectEditor对象的init方法中使用,如下所示:

 SelectCellEditor : function(args) {
        var $select;
        var defaultValue;
        var scope = this;

        this.init = function() {

            if(args.column.options){
              opt_values = args.column.options.split(',');
            }else{
              opt_values ="yes,no".split(',');
            }
            option_str = ""
            for( i in opt_values ){
              v = opt_values[i];
              option_str += "<OPTION value='"+v+"'>"+v+"</OPTION>";
            }
            $select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>");
            $select.appendTo(args.container);
            $select.focus();
        };

        this.destroy = function() {
            $select.remove();
        };

        this.focus = function() {
            $select.focus();
        };

        this.loadValue = function(item) {
            defaultValue = item[args.column.field];
            $select.val(defaultValue);
        };

        this.serializeValue = function() {
            if(args.column.options){
              return $select.val();
            }else{
              return ($select.val() == "yes");
            }
        };

        this.applyValue = function(item,state) {
            item[args.column.field] = state;
        };

        this.isValueChanged = function() {
            return ($select.val() != defaultValue);
        };

        this.validate = function() {
            return {
                valid: true,
                msg: null
            };
        };

        this.init();
    }
Run Code Online (Sandbox Code Playgroud)

  • 大!我不仅使用你的想法来添加`select`,而且这个例子对于更好地理解如何将参数传递给编辑器也很有用. (2认同)

Tin*_*Tin 17

我假设你的意思是自定义单元格编辑器.这是slick.editors.js中基于选择的布尔单元格编辑器示例.您可以轻松地修改它以使用任意一组可能的值.

function YesNoSelectCellEditor($container, columnDef, value, dataContext) {
    var $select;
    var defaultValue = value;
    var scope = this;

    this.init = function() {
        $select = $("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>");

        if (defaultValue)
            $select.val('yes');
        else
            $select.val('no');

        $select.appendTo($container);

        $select.focus();
    };


    this.destroy = function() {
        $select.remove();
    };


    this.focus = function() {
        $select.focus();
    };

    this.setValue = function(value) {
        $select.val(value);
        defaultValue = value;
    };

    this.getValue = function() {
        return ($select.val() == 'yes');
    };

    this.isValueChanged = function() {
        return ($select.val() != defaultValue);
    };

    this.validate = function() {
        return {
            valid: true,
            msg: null
        };
    };

    this.init();
};
Run Code Online (Sandbox Code Playgroud)