Редактор условных выпадающих данных 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. Я не включил этот код выше, но некоторые из них включены в мой вопрос здесь:
Вы близки. В определении столбца вы добавляете информацию о выпадающем редакторе, как если бы вы всегда хотели, чтобы он отображался. Теперь перейдем к примеру кода здесь: http://developer.yahoo.com/yui/datatable/
Смотрите последнюю строчку, которая прикрепляет onEventShowCellEditor к любому событию, которое вы хотите, чтобы редактор всплывал? Вот куда вы положили условное. Вместо того, чтобы просто попросить показать редактор ячеек при любых обстоятельствах, вы помещаете туда некоторый код, например:
myDataTable.subscribe("cellClickEvent", function (ev) {
if ( ** whatever ** ) {
this.myDataTable.onEventShowCellEditor.apply(this, arguments);
}
});
Я не занимался YUI2 уже довольно давно, поэтому я не помню подробностей об аргументах, полученных слушателем событий. Я полагаю, что вы могли бы также использовать showCellEditor() вместо onEventShowCellEditor, последний только массирует аргументы, полученные из прослушивателя событий, и заканчивает тем, что вызывает showCellEditor, так что вы можете также пропустить его.