0

我目前正在编辑一个使用 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}
            }
    }
}];

我知道这段代码行不通,顺便说一下,我希望能得到一些指导。

4

2 回答 2

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,因此您不妨跳过它。

于 2013-05-11T07:59:58.730 回答
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。从 XML 填充下拉列表

于 2013-05-21T14:56:50.023 回答