2012-02-19 28 views
0

使用4.0.6我有一個帶有兩個項目,刪除按鈕和視圖按鈕的動作列的網格面板。刪除按鈕被禁用,但在某些情況下需要啓用它(如果用戶是管理員)。所以我試圖在代碼中啓用它。extjs 4動態啓用動作列項目

這裏的視圖:

Ext.define('PP.view.person.List', { 
extend: 'Ext.grid.Panel', 
alias: 'widget.personlist', 
title: 'Current people', 
store: 'People', 
columnLines: true, 

initComponent: function() { 
    this.columns = [ 
     { header: 'Id', dataIndex: 'personId', flex: 1, sortable: true }, 
     { header: 'Title', dataIndex: 'title', flex: 1 }, 
     { header: 'Name', dataIndex: 'name', flex: 1}, 
     { xtype:'actioncolumn', 
      items:[ 
       {icon:'cross.gif',disabled:true,handler:function(){alert('delete pressed');}}, 
       {icon:'tick.gif',handler:function(){alert('view pressed');}} 
      ] 
     } 
    ]; 

    this.callParent(arguments); 
} 

});

和我使用,使控制器功能:

enableDel: function() { 
    var view = Ext.widget('personlist'); 
    view.down('actioncolumn').enableAction(0); 
} 

但我對開始

me.up('tablepanel').el.select 

el的是未定義的線越來越ExtJS的enableAction函數內部錯誤。該列也未啓用。任何人都可以告訴我我做錯了什麼或發表一個有效的例子嗎?如果我指定

renderTo: Ext.getBody() 

在視圖中,我不再收到錯誤,但列仍然無法啓用。所以我認爲它必須與渲染有關,但我對此很陌生,我不知道從哪裏開始。

+0

看看您是否可以將您的代碼發佈到jsfiddle中。這裏是一個例子:http://jsfiddle.net/dbrin/8f8EC/ – dbrin 2012-02-20 04:04:16

回答

1

通常,當el未定義時,意味着您正在嘗試在呈現組件之前訪問它。你的enableDel函數何時被調用?您可能想嘗試將它放入afterrender偵聽器中。

+0

我是從一個按鈕點擊調用它,但實際上應用程序會調用它,一旦確定用戶是否是管理員。我把一個監聽器放在ActionLang,網格和視口上,在點擊我的按鈕之前都已經開了很久。但是,如果我在任何這些偵聽器中調用enableDel函數,它都可以工作。所以看起來我最初調用enableDel的時間太晚了 - 我仍然不完全明白。不過,我想我可以早於我的想法,即在任何暴力事件發生時,確定用戶是否是管理員。 – Nix 2012-02-20 09:33:46