我正在编辑使用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}
}
}
}];
我知道这段代码不起作用,顺便说一句,我只是很感激一些指导。
答案 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字符串中提取的。我没有包含上面的代码,但其中一些代码包含在我的问题中: