0

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 を調べましたが、その方法を本当に理解していませんでした。

4

1 に答える 1

1

プロパティの初期値をオーバーライドすることはできますが、とにかくコンストラクターで初期化されるため、初期値が何であれ失われるため、大きな違いはありません。

DataGrid がその基本クラスのコンストラクターをオーバーライドするのと同じように、コンストラクターをオーバーライドする必要があります。元のコンストラクターを呼び出してから、新しい値をプロパティに設定します。

于 2013-05-31T06:42:54.740 に答える