0

カスタム エディターのコンストラクター内から編集をキャンセルし、アクティブ セルがフォーカスを失うようにしたいと考えています。現在、cancelEditコンストラクターに渡されたオブジェクトから呼び出すことができますが、早期キャンセルが発生したかどうかを確認するために、、、および内loadValueでフラグを使用する必要もあります。また、これが発生しても、セルはフォーカスを失いません。isValueChangedserializeValuedestroy

これは可能ですか?

編集

以下は、エディターのコンストラクターのスニペットです。エディターを登録 (追加) し、名前を付けることができます。呼び出し時に、エディターは の値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
        }
    }
})()
4

0 に答える 0