2

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

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

如果在 Grid 中有 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 列,用户名,权限列中的权限我正在显示组合,我在上面给出了代码。

假设有 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
                }),

但是我能知道为什么每次都给呼叫服务器吗?我的意思是每条记录。我想一定有其他方法可以做到这一点,因为我在我的 Grid 商店中获得了许可。

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

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') 具有该用户的权限。

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

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

希望我能在这里很好地解释。

请尽快回复我

4

1 回答 1

0

当然,有几种方法可以做到这一点。我的建议是使用 autoLoad:true 进行权限存储。您立即获取用户权限,然后在网格加载时它对您的组合框可用。

于 2012-06-05T18:23:32.577 回答