如何动态设置组合选项/存储

时间:2012-06-05 15:05:01

标签: extjs4

我在网格中使用了它的组件列。

我想为每个用户设置不同的商店。

如果在网格中有4个用户,我想为每个用户设置不同的组合商店,这样当用户点击组合时,他会看到选项取决于他的权限,或存储我将设置。

xtype: 'itscomponentcolumn',
            text : '<b>Permission</b>',
            width: 150,
            dataIndex: 'permission',
            items: function(value,record) {
            return { 
                xtype: 'combobox',
                store: [[0,'View Only'], [1,'View & Edit'], [2,'View,Edit & Delete'],[3,'No Access']],
                //store:Combo_Store,
                queryMode:'local',
                displayField: 'display',
                valueField: 'value',
                name:'permission',
                forceSelection:true,
                width: 145,
                listeners: { }

我无法附上图片。 想象一下Grid有5条记录。 网格有2列,用户名,权限 在Permission列中我显示了组合,我上面给出了代码。

假设有vivek用户,如果他只有查看权限,那么我只想在vivek记录旁边的组合中显示视图。

与其他用户相同。

我曾尝试使用bindStore设置商店,但对我不起作用。

请建议我怎么做?

在您提出建议后,我的代码就像这样

xtype: 'itscomponentcolumn',
            text : '<b>Permission</b>',
            width: 250,
            sortable:false,
            dataIndex: 'permission',
            items: function(value,record) {
            return { 
                xtype: 'combobox',
                store: new Ext.data.Store({
                    proxy: {
                        type: 'ajax',
                        url: comboStoreURL+"&currenetUserId="+record.get("userId"),
                        reader: {
                            type: 'json',
                            root: 'jsonStore'
                        }
                    },
                    autoLoad: true
                }),

但我可以知道为什么每次都给出呼叫服务器吗?我的意思是每个记录。我想必须有其他方法来做到这一点,因为我的网格商店有权限。

我的实际网格代码是这样的。

var store = Ext.create('Ext.data.Store', 
            {
                storeId: 'ShareComponentStoreId', 
                fields: ['userId','userName','permission','isProjectOwner'],
                 proxy: {
                    type: 'ajax',
                    url:strURL,
                    reader: 
                    {
                        root: 'rootShareGrid', 
                        totalProperty: 'totalCount'
                    },
                    writer: 
                    {
                        type: 'json', 
                        writeAllFields: false, 
                        allowSingle: false, 
                        encode: true, 
                        root: 'row'
                    } 
                }

            }); 


var shareGrid = Ext.create('Ext.grid.Panel', {
            id: 'ShareComponentGrId',
            enableColumnMove:false,
            store: store,
        columns: [
        {
            text: '<b>Name</b>',
            flex: 1,            
            sortable:false,
            width: 100,
            dataIndex: 'userName'
        },
        { 
            xtype: 'itscomponentcolumn',
            text : '<b>Permission</b>',
            width: 250,
            sortable:false,
            dataIndex: 'permission',
            items: function(value,record) {
            return { 
                xtype: 'combobox',
                store: new Ext.data.Store({
                    proxy: {
                        type: 'ajax',
                        url: comboStoreURL+"&currenetUserId="+record.get("userId"),
                        reader: {
                            type: 'json',
                            root: 'jsonStore'
                        }
                    },
                    autoLoad: true
                }),
                queryMode : 'local',
                displayField: 'display',
                valueField: 'value',
                name:'permission',
                forceSelection:true,
                width: 200,

所以record.get('permission')具有该用户权限。

我想将该权限添加到Combo商店。

即。默认的combostore +用户的权限。

希望我能在这里解释清楚。

请尽快回复我

1 个答案:

答案 0 :(得分:0)

当然,有几种方法可以做到这一点。 我建议使用autoLoad的一个Permissions商店:true。您可以立即获取用户权限,然后在网格加载时可以使用组合框。