我目前正在编辑一个使用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}
}
}
}];
我知道这段代码不会工作,顺便说一下,我只是希望有一点指导。
你很接近了。在列定义中,您可以添加有关下拉编辑器的信息,就好像您总是希望它显示一样。现在,看看下面的代码示例:http://developer.yahoo.com/yui/datatable/#cellediting
看到最后一行,附加oneventshowcellleditor到任何事件,你想使编辑器弹出?这就是条件句的位置。不是要求在任何情况下都显示单元格编辑器,而是在那里放一些代码,比如:
myDataTable.subscribe("cellClickEvent", function (ev) {
if ( ** whatever ** ) {
this.myDataTable.onEventShowCellEditor.apply(this, arguments);
}
});
我已经有一段时间没有使用YUI2了,所以我不记得事件侦听器接收参数的细节了。我相信你也可以使用showCellEditor()而不是onEventShowCellEditor,后者只会从事件监听器接收参数,并最终调用showCellEditor,所以你不妨跳过它。
找到了如下的破解方案
In Column Definitions:
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, hometeamlistd和awayteamlistd是从XML字符串中提取的。我没有包括上面的代码,但其中一些包含在我的问题中:
2.5 YUI。从XML