为什么调用YUI Datatable showCellEditor不显示编辑器?

时间:2010-01-28 16:23:20

标签: yui yui-datatable

单击数据表中的第二个单元格(任何行)会导致单元格编辑器显示。但是,我试图从代码中显示单元格编辑器。代码如下所示:

    var firstEl = oDataTable.getFirstTdEl(rowIndex);
    var secondCell = oDataTable.getNextTdEl(firstEl);
    oDataTable.showCellEditor(secondCell);

当我调试到datatable.js代码时(通过单击或上面的代码),它通过showCellEditor函数遵循相同的路径,但上面的代码不会显示编辑器。

我正在使用YUI版本2.8.0r4。

3 个答案:

答案 0 :(得分:0)

我认为这是模糊事件问题。

因此,例如,我有必须将记录添加到datatable的链接,并显示其编辑器。

var mymethod = function (e) {
  YAHOO.util.Event.stopEvent(e);
  var r = {};
  r.id = 0;
  r.value = 'hello world';

  myDataTable.addRow(r);
  var cell = myDataTable.getLastTrEl().cells[0];
  myDataTable.showCellEditor(cell);        
}

YAHOO.util.Event.addListener('mylink2addrecord_ID', 'click', mymethod);

如果没有stopEvent,你将永远不会看到编辑器,因为当你点击链接时会调用tableBlur事件....

答案 1 :(得分:0)

正如mac所说,你需要停止上一个事件。由于某种原因,它(tableBlur事件)与showCellEditor函数冲突。这是第一个解决问题的地方。

总结一下,我所做的只是:

YAHOO.util.Event.stopEvent(window.event);<br/>
dt.showCellEditor(td); // dt = yui datatable obj, td = {record: yuirecord, column: yuicolumn}

当然,如果你的事件对象随时可用,就像mac的帖子一样,你可以像他那样将它传递给stopEvent(e)。

答案 2 :(得分:0)

你可以试试这个 - 这只是我所拥有的一大段事件处理程序代码的片段。 EditNext是在单元格上移动并显示编辑器的函数(如果单元格有一个:

   this.myDataTable.subscribe("editorKeydownEvent",function(oArgs) {
            var self = this,
                ed = this._oCellEditor,  // Should be: oArgs.editor, see: http://yuilibrary.com/projects/yui2/ticket/2513909
                ev = oArgs.event,
                KEY = YAHOO.util.KeyListener.KEY,
                Textbox = YAHOO.widget.TextboxCellEditor,
                Textarea = YAHOO.widget.TextareaCellEditor,
                DCE = YAHOO.widget.DateCellEditor,
                cell = ed.getTdEl(),
                col = ed.getColumn(),
                row,rec,

                editNext = function(cell) {
                    cell = self.getNextTdEl(cell);
                    while (cell && !self.getColumn(cell).editor) {

                        cell = self.getNextTdEl(cell);
                    }
                    if (cell) {
                        self.showCellEditor(cell);
                    }
                },