SlickGrid - 在Editor Constructor中干净地取消编辑

时间:2012-08-31 13:00:31

标签: slickgrid

我想从自定义编辑器的构造函数中取消编辑,并导致活动单元格失去焦点。目前,我可以从传递给构造函数的对象中调用cancelEdit,但我还必须在loadValueisValueChangedserializeValuedestroy中使用标记来检查是否发生了过早取消。此外,当发生这种情况时,细胞不会失去焦点。

这可能吗?

修改

下面是编辑器构造函数的片段。它允许注册(添加)编辑器并为其指定名称。在调用时,编辑器获取args.item.type的值并尝试检索为该值注册的编辑器。未显示的是仅遵循委派模式的代码,这会导致MyConstructor实例将工作委托给其内部编辑器实例。

如果没有与args.item.type的值匹配的编辑器,构造函数会尝试取消编辑。

MyConstructor = (function(){

    var editors = {}
    var defaultEditor = TextCellEditor

    constructorFn = function(args){
        this.init(args)
    }

    constructorFn.overridesEnabled = false
    constructorFn.defaultEditorEnabled = true;

    constructorFn.prototype.init = function(args){
        var editorExists = function(dataType){
            if(dataType in editors){
                return true
            }

            if(constructorFn.defaultEditorEnabled){
                return true
            }

            return false
        }

        var getEditor = function(args){
            if(args.item.type in editors){
                editorConstructor = editors[args.item.type]
                return new editorConstructor(args)
            }
            else{
                editorConstructor = defaultEditor
                return new editorConstructor(args)
            }
        }

        if(editorExists(args.item.type))
        {
            this.superClass.init.call(args)
            this.editor = getEditor(args)
        }
        else{
            debug.error("Prematurely destroying editor")
            args.cancelChanges()
            this.mumps = true
        }  
    }

    constructorFn.registerEditor = function(name, constructor){
        if(name in editors){
            if(constructorFn.overridesEnabled){
                editors[name] = constructor
            }
            else{
                //Log error
                debug.error("Cannot override existing constructor: " + name)
            }
        }
        else{
            editors[name] = constructor
        }
    }
})()

0 个答案:

没有答案