Alfresco Share のデータリストにいくつかの新しいフィルターを追加しました。ここで、データリストに入るときに、デフォルトで (「すべて」のデフォルト フィルタではなく) 新しいフィルタの 1 つが選択されるようにします。
データリストのレンダリングを担当する YUI2 コンポーネントのコンストラクターで、デフォルトのフィルターが設定されていることがわかりました。
/**
* DataGrid constructor.
*
* @param htmlId {String} The HTML id of the parent element
* @return {Alfresco.component.DataGrid} The new DataGrid instance
* @constructor
*/
Alfresco.component.DataGrid = function(htmlId)
{
Alfresco.component.DataGrid.superclass.constructor.call(this, "Alfresco.component.DataGrid", htmlId, ["button", "container", "datasource", "datatable", "paginator", "animation", "history"]);
// Initialise prototype properties
this.datalistMeta = {};
this.datalistColumns = {};
this.dataRequestFields = [];
this.dataResponseFields = [];
this.currentPage = 1;
this.totalRecords = 0;
this.showingMoreActions = false;
this.hideMoreActionsFn = null;
this.currentFilter =
{
filterId: "all",
filterData: ""
};
this.selectedItems = {};
this.afterDataGridUpdate = [];
私はすでにこのコンポーネントを他の目的 (特別な方法で列をレンダリングするなど) で拡張しており、今は this.currentFilter.filterId を "active" (これが私の新しいフィルターです) に変更したいと考えています。
これは、クラスを拡張してメソッドをオーバーライドする方法です。
// Extend default DataList...
YAHOO.extend(Datalist.custom.DataGrid, Alfresco.component.DataGrid,
{
onFilterChanged: function CustomDL_onFilterChanged(layer, args)
{
// Call super class method...
Datalist.custom.DataGrid.superclass.onFilterChanged.call(this, layer,args);
// Pop-up a message...
Alfresco.util.PopupManager.displayMessage({
text: "Filter Changed!"
});
}
}); })();
ただし、「this.currentFilter」などのクラス プロパティをオーバーライドする方法がわかりませんでした。メソッドのオーバーライドにしか成功しません。
私は YUI.lang.augmentProto と YUI.lang.augmentObject を調べましたが、その方法を本当に理解していませんでした。