2013-05-30 68 views
0

我已經添加了一些新的過濾器給Alfresco Share中的數據列表。現在,我想在默認情況下選擇我的新過濾器中的一個(而不是「All」默認過濾器),以便輸入我的數據列表。擴展yui2 - 如何以正確的方式覆蓋類屬性

我發現默認過濾器在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爲「活躍」(這是我的新過濾器)。

這是你如何擴展類和覆蓋了一個方法:

// 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,卻沒有真正理解如何去做。

回答

1

你可以重寫屬性的初始值,但它不會有太大的區別,因爲它在構造函數中被初始化,所以無論初始值是什麼,它都會丟失。

您應該重寫構造函數,方法與DataGrid重寫其基類的構造函數的方式相同。調用原始構造函數,然後爲該屬性設置一個新值。