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"]}
}
);
};
このように作成された「テスト」ボタンはレンダリングされず、基本的な空のボタン入力として表示されます。