1

我想用 SlickGrid 模仿电子表格的特定行为。用户:

  1. 单击单元格以激活它
  2. 输入=sum(,或任何公式,
  3. 原始单元格地址已保存
  4. 用户选择单元格范围(我假设原始单元格关闭了编辑器)
  5. 焦点返回到原始单元格,并附加了新的单元格范围。即=总和(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

这在 SlickGrid 1.4.x 中是不可能的,但将在当前仍在积极开发中的 2.0 版中得到支持。Alpha 版托管在 GitHub 上的一个单独分支中 - https://github.com/mleibman/SlickGrid/tree/v2.0a,我刚刚通过示例签入了支持此功能的初步代码。请参阅https://github.com/mleibman/SlickGrid/commit/17b1bb8f3c43022ee6aec89dcab185cd368b8785

这是一个基本的公式编辑器实现:

函数公式编辑器(参数){
    var _self = 这个;
    var _editor = new TextCellEditor(args);
    var _selector;

    $.extend(this, _editor);

    函数初始化(){
        // 注册一个插件来选择一个范围并将其附加到文本框
        // 因为事件以相反的顺序触发(最近添加的首先执行),
        // 这将覆盖其他插件,如 moverows 或选择模型,并将
        // 不要求网格不处于编辑模式
        _selector = new Slick.CellRangeSelector();
        _selector.onCellRangeSelected.subscribe(_self.handleCellRangeSelected);
        args.grid.registerPlugin(_selector);
    }

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

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


    在里面();
}
于 2010-11-27T04:29:02.563 回答