2012-12-21 34 views
0

我在窗口中有一個網格。該網格有3個動作:編輯,刪除和禁用。我想知道是否可以使禁用動作(當前爲「禁用/啓用」)的文本取決於所選記錄的當前狀態。因此,假設用戶選擇一個當前狀態爲已啓用的記錄,那麼該操作的文本應爲「禁用」。但是,如果用戶選擇狀態爲「已禁用」的記錄,則操作的文本應爲「啓用」。使用Action時可以這樣做嗎?或者我需要使用按鈕而不是Action?使Ext.Action的文本屬性依賴於另一個字段的值

回答

0

我假設您的操作按鈕位於停靠在網格面板頂部的工具欄中。唯一棘手的是獲取對網格的引用(不對其進行硬編碼)。網格的「選擇」事件只給你一個使用的rowmodel的引用。

/* Set a action attribute on the Ext.Action so we can find it */ 
var action = new Ext.Action({ 
    text: 'Do something', 
    handler: function(){ 
     Ext.Msg.alert('Click', 'You did something.'); 
    }, 
    iconCls: 'do-something', 
    itemId: 'myAction', 
    action: 'myAction' // I don't like itemId's personally :) 
}); 

/* In the Controller */ 
init: function() { 
    this.control({ 
     'mygrid': { 
      select: this.onRecordSelect 
     } 
    }); 
}, 

onRecordSelect: function(rowModel, record) { 
    var grid = rowModel.views[0].ownerCt); 
    var action = grid.getDockedItems('toolbar[dock="top"]')[0].down('button[action="myAction"]'); 
    var enabled = (record.get('CurrentStatus') == "Enabled"); 
    action.setText(enabled ? 'Disable' : 'Enable'); 
    action.setIconCls(enabled ? 'myDisableCls' : 'myEnableCls'); 
} 

/* in SASS */ 
.myDisableCls{ 
    background-image:url(#{$icon_path}/checkbox.png) !important; 
} 
.myEnableCls { 
    background-image:url(#{$icon_path}/checkbox_ticked.png) !important; 
} 

祝你好運!

+0

感謝您的詳細回覆。但是,代碼中的這段代碼的位置是:init:function(){this.control({'mygrid':{select:this.onRecordSelect}}); },我不確定控制器是什麼意思。我的代碼如下: anitacynax

+1

嗨,我在代碼上面放置註釋,第一部分進入你的視圖(網格)。你可以放入一個控制器,控制器使用一個'組件查詢'在運行時查找組件(網格),並響應組件查找的事件。現在,組件查詢使用xtype'mygrid'搜索一個組件,但你可以將任何東西最後一部分是你的樣式表中的CSS/SASS代碼片段,它顯示了動作按鈕中的複選框 –

+0

我以另一種方式解決了這個問題。我的代碼如下: – anitacynax

0

我以另一種方式解決了這個問題。這是我的代碼:

grid.getSelectionModel().on({ 
     selectionchange: function(sm, selections) { 
      if (selections.length > 0) { 
       Edit.enable(); 
       Delete.enable(); 
        if(selections[0].data.CurrentStatus == "Disabled"){ 
        Disable.setText("Enable"); 
        Disable.enable(); 
       }else{ 
        Disable.setText("Disable"); 
        Disable.enable(); 
       } 
      } else { 
       Edit.disable(); 
       Delete.disable(); 
       Disable.disable(); 
      } 
     } 
    }); 
相關問題