2012-04-17 56 views
0

我正在使用YUI(YAHOO用戶界面庫)和Velocity開發一個網頁,並且我已經使用其中一列中的某些按鈕設置了一個數據表。我的問題是,當我排序任何列時,按鈕不再呈現,即顯示爲簡單的輸入字段。 (簡化)代碼的一部分這裏:YUI:在排序後不顯示數據表中的按鈕

#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"]} 
     } 
); 
}; 

如此創建 '測試' 按鈕永遠不會呈現,只是顯示爲基本的空按鈕輸入。

+0

嗯,我無法整理出來,我只是禁用排序屬性,因爲它不是必需的。僅供參考:我也嘗試了沒有預先存在的html的創建按鈕,但無法成功將其插入格式化程序函數中:嘗試執行「... innerHtml = myButton.toString()」顯示類似「button-id254」的內容。 ..「 – Alexis 2012-04-24 08:37:38

回答

0

您的「buttonsFormatter」函數正在創建文本輸入元素。我認爲你需要在你創建的元素上有一個'type =「按鈕」'屬性。

我明白你爲什麼在呼喚新的YAHOO.widget.Button,但你應該做的是,在格式化功能。

+0

感謝您的回答,但是它並沒有真正解決問題:添加'type =」按鈕''使其呈現爲按鈕而不是文本輸入,但沒有對YAHOO做任何事情。 widget.Button聲明,所以基本上沒有圖標,鏈接不起作用。我將編輯我的問題來說明這一點。 – Alexis 2012-04-19 11:15:51