2013-05-10 3 views
0

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

Я хочу, чтобы иметь возможность добавлять выпадающий редактор для строк конкретного столбца с использованием 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} 
      } 
    } 
}]; 

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

ответ

0

Найдено Hacky решение следующим

в колонке Определения:

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. Populating a dropdown from XML

0

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

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

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

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

+0

Хорошо, я должен быть немного понятнее о том, что я хочу, чтобы это произошло. Каждая строка имеет уникальный event_id и team_id, который может быть получен из одной из двух команд. Если строка, выбранная в datatable, имеет team_id, равную команде 1 (например), мне нужно выпадающее меню, чтобы отображать только имена игроков из этой конкретной команды. Имена игроков для каждой команды хранятся в собственных массивах. Как инициализировать раскрывающееся меню в определениях столбцов? Какие аргументы потребуются для изменения содержимого раскрывающегося списка этого столбца? –