0

YUI (YAHOO User Interface Library) と Velocity を使用して Web ページを開発しており、列の 1 つにいくつかのボタンを含むデータテーブルを設定しています。私の問題は、列のいずれかを並べ替えると、ボタンがレンダリングされなくなることです。つまり、単純な入力フィールドとして表示されます。(簡略化された)コードの一部:

#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"' 属性が必要だと思います。

new YAHOO.widget.Button を呼び出す理由は理解できると思いますが、フォーマッタ関数でそれを行う必要があります。

于 2012-04-17T15:26:12.457 に答える