我正在使用 YUI(YAHOO 用户界面库)和 Velocity 开发一个网页,并且我在其中一列中设置了一个带有一些按钮的数据表。我的问题是,当我对任何列进行排序时,按钮不再呈现,即显示为简单的输入字段。这里是(简化的)代码的一部分:
#set($states=['valid','invalid','empty'])
var buttonsFormatter = function(elLiner, oRecord, oColumn, oData) {
elLiner.innerHTML = '';
#foreach($state in $states)
elLiner.innerHTML = elLiner.innerHTML+'<input id="${state}Button-'+oRecord.getData("id")+'"/>';
#end
};
var myColumnDefs = [
{key:"change",
label: "Actions",
formatter: buttonsFormatter,
sortable: true,
resizeable: true},
];
// Then create datasource, datatable, etc...
// $comment is the object I use to build the datasource
// So here I loop over records to instantiate the buttons
#foreach($comment in $comments_arraylist)
new YAHOO.widget.Button("validButton-"+$comment.getId(),
{label:'<img src="$content.getURI("images/gc.gif")"/>',
title:'Valid',
onclick:{ fn:makeRequest,obj:[$comment.getId(),"Valid"]}
}
);
new YAHOO.widget.Button("invalidButton-"+$comment.getId(),
{label:'<img src="$content.getURI("images/rc.gif")"/>',
title:'Invalid',
onclick:{ fn:makeRequest,obj:[$comment.getId(),"Invalid"]}
}
);
new YAHOO.widget.Button("emptyButton-"+$comment.getId(),
{label:'<img src="$content.getURI("images/close.jpg")"/>',
title:'Reset',
onclick:{ fn:makeRequest,obj:[$comment.getId(),"null"]}
}
);
#end
我也尝试在格式化程序函数中添加新的 YAHOO.widget.Button...声明,但没有更多成功。有人对我有想法吗?我不得不提一下,除了排序的这个问题,一切都很好。
谢谢
亚历克西斯
编辑:以这种方式修改按钮格式化程序功能无济于事:
var buttonsFormatter = function(elLiner, oRecord, oColumn, oData) {
elLiner.innerHTML = '';
#foreach($state in $states)
elLiner.innerHTML = elLiner.innerHTML+'<input type="button" id="${state}Button-'+oRecord.getData("id")+'"/>';
#end
elLiner.innerHTML = elLiner.innerHTML+'<input type="button" id="testButton-'+oRecord.getData("id")+'"/>';
new YAHOO.widget.Button("testButton-"+oRecord.getData("id"),
{label:'<img src="$content.getURI("images/gc.gif")"/>',
title:'test',
onclick:{ fn:makeRequest,obj:[oRecord.getData("id"),"test"]}
}
);
};
如此创建的“测试”按钮永远不会被渲染,只是作为一个基本的空按钮输入出现。