カスタム エディターのコンストラクター内から編集をキャンセルし、アクティブ セルがフォーカスを失うようにしたいと考えています。現在、cancelEdit
コンストラクターに渡されたオブジェクトから呼び出すことができますが、早期キャンセルが発生したかどうかを確認するために、、、および内loadValue
でフラグを使用する必要もあります。また、これが発生しても、セルはフォーカスを失いません。isValueChanged
serializeValue
destroy
これは可能ですか?
編集
以下は、エディターのコンストラクターのスニペットです。エディターを登録 (追加) し、名前を付けることができます。呼び出し時に、エディターは の値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
}
}
})()