YUI数据条件下拉列表编辑器

时间:2013-05-10 13:15:36

标签: drop-down-menu datatable conditional yui yui-editor

我正在编辑使用YUI 2.5的应用程序。我之前没有使用它,可以使用一些帮助。

我希望能够使用数据表为特定列的行添加下拉列表编辑器,但我只希望在特定值出现在相应行的另一列中时显示。

是否可以在列定义中添加某种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 个答案:

答案 0 :(得分:0)

你很亲密。在列定义中,您可以添加有关下拉菜单编辑器的信息,就像您始终希望它显示一样。现在,转到此处的代码示例:http://developer.yahoo.com/yui/datatable/#cellediting

请查看将onEventShowCellEditor附加到您要使编辑器弹出的任何事件的最后一行?这就是你放置条件的地方。你可以在那里放一些代码,而不仅仅是要求在任何情况下显示单元格编辑器,例如:

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

我已经有很长一段时间没有做过YUI2,所以我不记得事件监听器收到的参数的细节。我相信你也可以使用showCellEditor()而不是onEventShowCellEditor,后者只按下从事件监听器收到的参数并最终调用showCellEditor,所以你也可以跳过它。

答案 1 :(得分: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