Редактор условных выпадающих данных YUI

В настоящее время я редактирую приложение, которое использует YUI 2.5. Я не использовал его раньше и мог бы помочь.

Я хочу иметь возможность добавить раскрывающийся редактор для строк определенного столбца, используя datatable, но я хочу, чтобы он отображался только в том случае, если конкретные значения появляются в другом столбце в соответствующей строке.

Можно ли добавить какой-то оператор If в определения столбцов? Должен ли я использовать пользовательский форматтер?

например.

var eventColumnDefs = [
{key:"event_id", sortable:false},
{key:"event_name", sortable:true},
{key:"extended", sortable:true,  formatter: function (o) {
    if (event_name=type1||event_name=type4||event_name=type5) {
        editor:"dropdown", editorOptions:{dropdownOptions:eventData.extendedList}
            }
    }
}];

Я знаю, что этот код не будет работать, кстати, я был бы просто признателен за руководство.

2 ответа

Решение

Нашел взломанное решение следующим образом

В определениях столбцов:

var eventColumnDefs = [
    {key:"player_name", sortable:true, editor:"dropdown", editorOptions:{dropdownOptions:currenteam}}
];

Затем позже в initialiseTables:

eventDataTable.subscribe("cellClickEvent", function(ev) {
var target, column, field;

target = ev.target;
column = this.getColumn(target);

if (column.key === "player_name") {
field= this.getRecord(target).getData("team_id");
}
if (hometeamlistID == field) {
currenteam=hometeamlist;
} else if (awayteamlistID == field) {
currenteam=awayteamlist; 
}
eventDataTable._oColumnSet._aDefinitions[8].editorOptions.dropdownOptions = currenteam;

});

hometeamlist, awayteamlist, hometeamlistID и awayteamlistID извлекаются из строки XML. Я не включил этот код выше, но некоторые из них включены в мой вопрос здесь:

YUI 2.5. Заполнение выпадающего списка из XML

Вы близки. В определении столбца вы добавляете информацию о выпадающем редакторе, как если бы вы всегда хотели, чтобы он отображался. Теперь перейдем к примеру кода здесь: http://developer.yahoo.com/yui/datatable/

Смотрите последнюю строчку, которая прикрепляет onEventShowCellEditor к любому событию, которое вы хотите, чтобы редактор всплывал? Вот куда вы положили условное. Вместо того, чтобы просто попросить показать редактор ячеек при любых обстоятельствах, вы помещаете туда некоторый код, например:

myDataTable.subscribe("cellClickEvent", function (ev) {
     if ( ** whatever ** ) {
         this.myDataTable.onEventShowCellEditor.apply(this, arguments);
     }
});

Я не занимался YUI2 уже довольно давно, поэтому я не помню подробностей об аргументах, полученных слушателем событий. Я полагаю, что вы могли бы также использовать showCellEditor() вместо onEventShowCellEditor, последний только массирует аргументы, полученные из прослушивателя событий, и заканчивает тем, что вызывает showCellEditor, так что вы можете также пропустить его.

Другие вопросы по тегам