0

我正在使用 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"]}
      }
  ); 
};

如此创建的“测试”按钮永远不会被渲染,只是作为一个基本的空按钮输入出现。

4

1 回答 1

0

您的“buttonsFormatter”函数正在创建文本输入元素。我认为你需要在你在那里创建的元素上有一个 'type="button"' 属性。

我理解你为什么要调用新的 YAHOO.widget.Button,但你应该在格式化程序函数中这样做。

于 2012-04-17T15:26:12.457 回答