2017-05-01 19 views
0

名前とコードの2つの列を持つテーブルがあります。私はコード列のための簡単なカスタムエディタを作成しました。アイデアは、ユーザーがセルをダブルクリックすると、コードエディタ付きのカスタムダイアログが開きます。私はそれを実装し、ここで簡単な例を掲載している:Handsontable、カスタムテキストエディタ、コピー/ペーストの問題

Link to plunker

はしかし、私はコピー/ペースト機能を持つ1つの問題を持っている:私は私のエディタを使用する場合、セルを押して「保存」のためにいくつかのコードを編集し、 「コード」列の値が正しく保存されているようです。しかし、このセルを選択してCtrl + Cを押すと、値はコピーされません。

質問があります:これはhandontableのバグですか、私はカスタムエディタを実装している間に何かを見逃してしまっていますか?カスタムエディタを変更して、コピーペースト機能を適切に動作させるにはどうすればよいですか。

エディタのコード:

var ScriptEditor = Handsontable.editors.TextEditor.prototype.extend(); 

ScriptEditor.prototype.getValue = function() { 
    return this.TEXTAREA.value; 
}; 

ScriptEditor.prototype.setValue = function (value) { 
    this.TEXTAREA.value = value; 
}; 

ScriptEditor.prototype.open = function() { 

    var self = this; 

    this.instance.deselectCell(); 

    var value = self.instance.getDataAtCell(self.row, self.col); 
    var decodedCode = decodeURI(value); 

    var success = function (resultCode) { 
     var encodedCode = encodeURI(resultCode); 

     self.instance.setDataAtCell(self.row, self.col, encodedCode, 'edit'); 
     self.instance.selectCell(self.row, self.col); 
    }; 

    openEditor(decodedCode) 
      .then(success); 

}; 

ScriptEditor.prototype.focus = function() { 
    Handsontable.editors.TextEditor.prototype.focus.apply(this, arguments); 
}; 

ScriptEditor.prototype.close = function() { 

}; 


var openEditor = function (codeToEdit) { 

    var deferred = $q.defer(); 

    var dialog = ngDialog.open({ 
     template: 'editorTemplate.htm', 
     className: 'ngdialog-theme-default', 
     controllerAs: "editor", 
     controller: function() { 
      var vm = this; 
      vm.inputCode = codeToEdit; 
      vm.submitChanges = function() { 
       dialog.close(); 
       deferred.resolve(vm.inputCode); 
      }; 
     } 
    }); 

    return deferred.promise; 
}; 

仕様: 角度バージョン:1.6.1 Handsontableバージョン:0.31.2 Chromeバージョン:バージョン58.0.3029.81

答えて

0

私は上の問題を掲載しています手持ちのgithub repositioryと答えを受け取った。問題へのリンク:here

ソリューション: handsontableチームの一員のように、私はthis.instance.deselectCell();呼んで私のダイアログを開く前に開いている機能では、提案しています。しかし、この解決策では、「コードエディタの入力」ダイアログを押しても、新しい行は挿入されず、handsontableの次のセルが選択されるという問題がありました。その後、私はsetTimeout()で呼び出しをラップし、それが働いています。 plunkerへ

リンク: here

作業コードは次のとおりです。

ScriptEditor.prototype.open = function() { 

    var self = this; 

    setTimeout(function() { 
     self.instance.deselectCell(); 
    }); 

    var value = self.instance.getDataAtCell(self.row, self.col); 
    var decodedCode = decodeURI(value); 

    var success = function (resultCode) { 
     var encodedCode = encodeURI(resultCode); 
     self.instance.setDataAtCell(self.row, self.col, encodedCode, 'edit'); 
     self.instance.selectCell(self.row, self.col); 
    }; 

    openEditor(decodedCode) 
     .then(success); 

}; 
関連する問題