1

SlickGrid を使用してスプレッドシートの特定の動作を模倣したいと考えています。ユーザー:

  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;
  }
}; 

前もって感謝します!

4

1 に答える 1

6

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

基本的な数式エディタの実装は次のとおりです。

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

    $ .extend(this、_editor);

    関数init(){
        //プラグインを登録して範囲を選択し、テキストボックスに追加します
        //イベントは逆の順序で発生するため(最後に追加されたものが最初に実行されます)、
        //これは、moverowsやselection modelなどの他のプラグインをオーバーライドし、
        //グリッドが編集モードになっていない必要はありません
        _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);
    };


    初期化();
}
于 2010-11-27T04:29:02.563 に答える