Почему вызов YUI Datatable showCellEditor не отображает редактор? - PullRequest
1 голос
/ 28 января 2010

Нажатие на вторую ячейку (любую строку) в таблице данных приводит к отображению редактора ячеек. Но я пытаюсь отобразить редактор ячеек из кода. Код выглядит следующим образом:

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

Когда я выполняю отладку в коде datatable.js (либо щелчком, либо из приведенного выше кода), он следует по тому же пути через функцию showCellEditor, но приведенный выше код не отображает редактор.

Я использую YUI версии 2.8.0r4.

Ответы [ 3 ]

0 голосов
/ 27 октября 2010

Как сказал Мак, вам нужно остановить предыдущее событие. По какой-то причине оно (событие tableBlur) конфликтует с функцией showCellEditor. Это первое место, где была решена проблема.

Подводя итог, все, что я сделал, было:

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

Конечно, если у вас есть объект события, легко доступный, как в сообщении Mac, вы можете передать его stopEvent (e), как он сделал.

0 голосов
/ 16 августа 2011

Вы можете попробовать это - это ТОЛЬКО фрагмент из большего фрагмента кода обработчика событий, который у меня есть. 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);
                    }
                },
0 голосов
/ 16 февраля 2010

Я думаю, что это проблема размытия событий.

Так, например, у меня есть ссылка, которая должна добавить запись в 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 ....

...