2

グリッドでそのコンポーネント列を使用しています。

ユーザーごとに異なるストアを設定したい。

グリッドに 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: { }

画像添付できません。5 つのレコードを持つグリッドがあると想像してみてください。グリッドには、user Name、Permission 列の Permission の 2 つの列があります。コンボを表示しています。このコードについては、上記で説明しました。

vivek user がいるとします。彼が表示のみの権限を持っている場合、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 ストアに追加したいと思います。

つまり、デフォルトのコンボストア + ユーザーの許可です。

ここでうまく説明できることを願っています。

これについてはできるだけ早く返信してください

4

1 に答える 1

0

もちろん、これを行うにはいくつかの方法があります。私がお勧めするのは、autoLoad:true を使用してアクセス許可ストアを作成することです。ユーザー権限をすぐに取得すると、グリッドがロードされたときにコンボボックスで利用できるようになります。

于 2012-06-05T18:23:32.577 に答える