我在Alfresco Share的数据列表中添加了一些新的过滤器。现在我想在输入我的datalist时默认选择我的一个新过滤器(而不是“All”默认过滤器)。
我发现默认过滤器是在负责呈现数据列表的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,但没有真正理解如何操作。
答案 0 :(得分:1)
你可以覆盖属性的初始值,但它不会产生很大的差别,因为无论如何它都会在构造函数中初始化,所以无论初始值是什么,它都会丢失。
您应该覆盖构造函数,方法与DataGrid覆盖其基类的构造函数的方式相同。调用原始构造函数,然后为属性设置一个新值。