2

同様の質問が他の場所で回答されていないのを見てきました。2 つのオプション (ASC、DEC) を含む列にコンボボックスを配置したいと考えています。各行に表示するか、少なくとも選択されていないときにその値を表示したい。

各行にコンボボックスをレンダリングするのは「良い考え」ではないことはわかっていますが、この場合、最大約20行になることがわかっているので、大したことではありません。これができない場合は、コンボボックスから選択した値を表示したいと思います。現在、行をクリックするとコンボボックスが表示されるだけですが、選択を行っていない限り選択内容が表示されないため、あまり意味がありません。これに対する解決策は何ですか?

また、行をクリックするとポップアップする変更ボタンとキャンセルボタンを取り除きたいのですが、コンボボックスでセルを編集して、自動的に変更/保存できるようにしたいだけです。

4

2 に答える 2

8

のデフォルト値を設定できますcombo

その後、起動時にレンダリングされます。

セルrendererをグリッドに使用しrenderますdisplayFieldcomboAPI コード ボックスの 1 つにポスターとして表示できる実際の例に従います。

ワーキングJSFiddle

Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    fields: ['name', 'email', 'phone', 'id'],
    data: {
        'items': [{
            "name": "Lisa",
            "email": "lisa@simpsons.com",
            "phone": "555-111-1224",
            "id": 0
        }, {
            "name": "Bart",
            "email": "bart@simpsons.com",
            "phone": "555-222-1234",
            "id": 1
        }, {
            "name": "Homer",
            "email": "home@simpsons.com",
            "phone": "555-222-1244",
            "id": 2
        }, {
            "name": "Marge",
            "email": "marge@simpsons.com",
            "phone": "555-222-1254",
            "id": 3
        }]
    },
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'items'
        }
    }
});

// the renderer. You should define it within a namespace
var comboBoxRenderer = function(combo) {
    return function(value) {
        var idx = combo.store.find(combo.valueField, value);
        var rec = combo.store.getAt(idx);
        return (rec === null ? '' : rec.get(combo.displayField));
    };
}
// the combo store
var store = new Ext.data.SimpleStore({
    fields: ["value", "text"],
    data: [
        [1, "Option 1"],
        [2, "Option 2"]
    ]
});
// the edit combo
var combo = new Ext.form.ComboBox({
    store: store,
    valueField: "value",
    displayField: "text"
});


// demogrid
Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [{
        header: 'Name',
        dataIndex: 'name',
        editor: 'textfield'
    }, {
        header: 'Email',
        dataIndex: 'email',
        flex: 1,
        editor: {
            xtype: 'textfield',
            allowBlank: false
        }
    }, {
        header: 'Phone',
        dataIndex: 'phone'
    }, {
        header: 'id',
        dataIndex: 'id',
        editor: combo,
        renderer: comboBoxRenderer(combo)
    }],
    selType: 'cellmodel',
    plugins: [
        Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 1
        })
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});
于 2012-09-07T13:39:43.233 に答える
1
{
    header: 'Your header',
    dataIndex: 'your Column',
    editor: {
        xtype: 'combobox',
        store: yourStore,
        queryMode: 'local',
        displayField: 'Your Display..',
        valueField: 'Your Value'
    }
于 2013-01-28T07:13:11.980 に答える