2016-04-27 41 views
0

有沒有一種方法可以在製表符切換時重新渲染組件?我有加載其所有存儲的數據,其中包含特定的權限。每個選項卡只能包含爲其視圖提供的內容。見下面我的截圖:在ExtJS 4.2中更新和渲染組件4.2

enter image description here

基本上,這個負載在initComponent。我目前遇到的困境是Backoffice選項卡與Wombat選項卡有不同的權限。這個想法是,當他們中的任何一個都包含一個權限,比如「編輯」權限(sCreate)時,只允許該角色顯示所見的編輯按鈕。所以Backoffice有sEcommCreate,而袋熊有sCreate。當它們中的任何一個滿足爲真時,它只是將其加到/推到initComponent期間要顯示的列。

if (EcommBackoffice.plugin.Security.getAccess(oMe.sCreatePermission)) { 
    aColumns.push({ 
    header: 'Action', 
    xtype: 'actioncolumn', 
    itemId: 'edit-role-btn', 
    width: 100, 
    sortable: false, 
    resizable: false, 
    draggable: false, 
    menuDisabled: true, 
    items: [{ 
     icon: 'resources/img/editpermissions.png', 
     tooltip: 'Edit Permissions', 
     scope: oMe 
    }], 
    editor: { 
     xtype: 'text', 
     name: 'editRow', 
     cls: 'banks-delete-row' 
    } 
    }); 

} 

如何在打開另一個選項卡時以及在加載時過濾顯示?目前,一旦sCreatesEcommCreate通過其條件,它只是添加這兩個角色上的按鈕,因爲這是一個store

已經嘗試過來自控制器重新加載數據存儲,但它僅 加載數據,而不是重新呈現的組件要麼 添加/刪除/顯示/隱藏它們。

爲了更清楚,我需要隱藏/刪除Action列,如果它沒有創建權限分配給它。

回答

0

actioncolumn和所有動作列項目有一個功能isDisabled。我建議使用該功能來啓用/禁用該項目,例如

items: [{ 
    icon: 'resources/img/editpermissions.png', 
    tooltip: 'Edit Permissions', 
    isDisabled:function() { 
     var isWombatTab = (this.up('tabpanel').getActiveTab().text == 'Wombat'); 
     if(isWombatTab) return EcommBackoffice.plugin.Security.getAccess(oMe.sCreatePermission) 
     else return EcommBackoffice.plugin.Security.getAccess(oMe.sEcommCreatePermission) 
    }, 
    scope: oMe 
}], 

isDisabled()將網格刷新過程中進行處理,所以每當你重裝店面,這些變化應該生效。要強制刷新而不更改商店,您當然可以從標籤的activate事件中調用grid.refresh()

然後應該可以通過CSS隱藏禁用的項目。我不知道到底需要什麼(也可能取決於您使用的主題),但第一個猜測是

.x-grid-cell-edit-role-btn .x-item-disabled { 
    visibility:hidden; 
} 
+0

試過這個,它似乎不起作用。嘗試記錄'this.up('tabpanel')。getActiveTab()。text',它告訴我'無法讀取屬性'null'的getActiveTab'。 – ralphcarlo

+0

這是否也適用於Ext.toolbar?我的標籤是使用'Ext.toolbar.Toolbar'創建的。我假設'this.up('tabpanel')'假設我正在使用一個標籤,對吧? – ralphcarlo

+0

這似乎無法解決問題。它確實隱藏了按鈕而不是列本身。而且,即使在切換標籤頁時,行爲仍然保持原樣。 – ralphcarlo