2010-11-19 123 views
1

SlickGridでスプレッドシートの特定の動作を模倣したいと思います。ユーザー:細胞上SlickGridでのExcelのような動作

  1. クリック
  2. それを活性化するには、ユーザはセル範囲(私は仮定する元を選択=sum(、または任意の式、
  3. 元のセルアドレスを保存する
  4. に入りますセルはエディタを閉じます)
  5. 新しいセル範囲が追加された元のセルにフォーカスが戻されます。すなわち= sum(r1c1、r2c2)である。オフ私を投げ何

は、フォーカスを変更する必要があることです。

var cell_with_formula = null; 
grid = new Grid($("#myGrid"), data, columns, options); 

// save original cell address, but there is no onBlur event 
grid.onBlur = function(args){ 
    cell_with_formula = args; // save address 
}; 

grid.onCellRangeSelected = function(){ 
    if(cell_with_formula){ 
    // check if cell_with_formula has `=` at begining 
    // if so, append selected range  
    cell_with_formula = null; 
    } 
}; 

ありがとうございます!

+0

それに取り組んで:) がうまくいけば今週最初の2.0alphaをコミットします。 – Tin

+1

私は数式評価をサポートするエクストリメリックなデモをコーディングしました。 http://blog.pseudoglossa.gr/2012/08/formula-evaluation-in-slickgrid/ – fusion

答えて

6

これはSlickGrid 1.4.xでは不可能ですが、現在まだ開発中のバージョン2.0ではサポートされる予定です。アルファはGitHub-https://github.com/mleibman/SlickGrid/tree/v2.0aの別のブランチでホストされています。これを例としてサポートする予備コードをチェックインしました。 https://github.com/mleibman/SlickGrid/commit/17b1bb8f3c43022ee6aec89dcab185cd368b8785をご覧ください。

は、ここで基本的な数式エディタの実装です:

 
function FormulaEditor(args) { 
    var _self = this; 
    var _editor = new TextCellEditor(args); 
    var _selector; 

    $.extend(this, _editor); 

    function init() { 
     // register a plugin to select a range and append it to the textbox 
     // since events are fired in reverse order (most recently added are executed first), 
     // this will override other plugins like moverows or selection model and will 
     // not require the grid to not be in the edit mode 
     _selector = new Slick.CellRangeSelector(); 
     _selector.onCellRangeSelected.subscribe(_self.handleCellRangeSelected); 
     args.grid.registerPlugin(_selector); 
    } 

    this.destroy = function() { 
     _selector.onCellRangeSelected.unsubscribe(_self.handleCellRangeSelected); 
     grid.unregisterPlugin(_selector); 
     _editor.destroy(); 
    }; 

    this.handleCellRangeSelected = function(e, args) { 
     _editor.setValue(_editor.getValue() + args.range); 
    }; 


    init(); 
} 
関連する問題