组合框未在ExtJS网格中呈现

组合框未在ExtJS网格中呈现,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我使用的是ExtJS4.2。我使用下面的代码在ExtJS网格中呈现一个组合框。这是我第一次尝试在一个网格内的组合框,我的最终目标是超出这个级别几级。但是我被困在第一步,即添加一个组合框并在网格的组合框中显示Json结果。下面是我的代码: Ext.onReady(function() { Ext.require([ 'Ext.data.*', 'Ext.grid.*' ]); // ************************** Define Data Models *

我使用的是ExtJS4.2。我使用下面的代码在ExtJS网格中呈现一个组合框。这是我第一次尝试在一个网格内的组合框,我的最终目标是超出这个级别几级。但是我被困在第一步,即添加一个组合框并在网格的组合框中显示Json结果。下面是我的代码:

Ext.onReady(function() {

    Ext.require([ 'Ext.data.*', 'Ext.grid.*' ]);


    // ************************** Define Data Models ************************ //

    Ext.define('SecureUser', {
        extend : 'Ext.data.Model',
        fields : [ 'id', 'username' ]
    });


    // ************************** Define Data Stores ************************ //

    //The Store contains the AjaxProxy as an inline configuration
    var userStore = Ext.create('Ext.data.Store', {
        autoLoad : true,
        model : 'SecureUser',
        proxy : {
            type : 'ajax',
            api: {
                read: 'secureUserSecureRole/listJSON',
            },
            reader : {
                type : 'json',
                successProperty: 'success',
                root : 'secureUsers',
                messageProperty: 'message'
            },
            writer : {
                type : 'json',
                encode: 'true',
                root: 'secureUsers'                 
            }
        }
    });


    //renderer needed to display correct field when not editing combo (see API)
    Ext.util.Format.comboRenderer = function(combo) {
        return function(value) {
            var record = combo.findRecord(combo.valueField, value);
            return record ? record.get(combo.displayField)
                    : combo.valueNotFoundText;
        }
    }

    var combo = new Ext.form.ComboBox({
        typeAhead: true,
        triggerAction: 'all',
        mode: 'remote',
        store: userStore,
        valueField: 'username',
        displayField: 'username'
    });

    // Grid-columns with meta-data from backend.
    var recipeColumns = [ {
        header : "ID",
        width : 40,
        sortable : true,
        dataIndex : 'id'
    },{
        header : 'User Name',
        width : 130,
        dataIndex : 'username',
        editor : combo,
        renderer: Ext.util.Format.comboRenderer(combo)
    }];

    // create youbrew.recipe.Grid instance (@see recipeGrid.js)
    var userGrid = Ext.create('Ext.grid.Panel', {
        renderTo : document.body,
        store: userStore,
        width : 200,
        height : 300,
        clicksToEdit : 'auto',
        columns : recipeColumns
    });
});
从后端返回的我的JSON对象是: {“suces”:true,“secureUsers”:[{“username”:“admin”,“id”:1},{“username”:“super”,“id”:2},{“username”:“user”,“id”:3}]}

结果就是一个网格,其中包含两个标题ID和用户名,以及一个接一个列出的记录。但是,我没有在每一行的用户名上看到任何组合框。即使我点击,它们也不会变成组合框(我读到这是某个地方的行为)。此外,我在调试器工具上也没有看到任何运行时错误


你能告诉我哪里出了问题吗?是因为我对网格和组合使用了相同的用户存储吗?

您需要向网格配置中添加
CellEditing
插件:

var userGrid = Ext.create('Ext.grid.Panel', {
    renderTo : document.body,
    store: userStore,
    width : 200,
    height : 300,
    columns : recipeColumns,
    plugins: [
        Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 1
        })
    ]
});
(西班牙语)mi me Functiono,de la siguiente forma:

Ext.onReady(function() {

    Ext.require([ 'Ext.data.*', 'Ext.grid.*' ]);


    // ************************** Define Data Models ************************ //

    Ext.define('SecureUser', {
        extend : 'Ext.data.Model',
        fields : [ 'id', 'username' ]
    });


    // ************************** Define Data Stores ************************ //

    //The Store contains the AjaxProxy as an inline configuration
    var userStore = Ext.create('Ext.data.Store', {
        autoLoad : true,
        model : 'SecureUser',
        proxy : {
            type : 'ajax',
            api: {
                read: 'secureUserSecureRole/listJSON',
            },
            reader : {
                type : 'json',
                successProperty: 'success',
                root : 'secureUsers',
                messageProperty: 'message'
            },
            writer : {
                type : 'json',
                encode: 'true',
                root: 'secureUsers'                 
            }
        }
    });

    var combo = new Ext.form.ComboBox({
        typeAhead: true,
        triggerAction: 'all',
        mode: 'remote',
        store: userStore,
        valueField: 'username',
        displayField: 'username'
    });

    var comboRenderer = function(value, p, record) {
        var record = combo.findRecord(combo.valueField, value);
        return record ? record.get(combo.displayField) : value;
    }

    // Grid-columns with meta-data from backend.
    var recipeColumns = [ {
        header : "ID",
        width : 40,
        sortable : true,
        dataIndex : 'id'
    },{
        header : 'User Name',
        width : 130,
        dataIndex : 'username',
        editor : combo,
        renderer: comboRenderer
    }];

    // create youbrew.recipe.Grid instance (@see recipeGrid.js)
    var userGrid = Ext.create('Ext.grid.Panel', {
        renderTo : document.body,
        store: userStore,
        width : 200,
        height : 300,
        clicksToEdit : 'auto',
        columns : recipeColumns,
        plugins: [Ext.create('Ext.grid.plugin.CellEditing')]
    });
});

对usI来说,拥有一把小提琴会更容易,因为我没有看到你的网格中有CellEditing插件,也许这就是为什么他会这么做。谢谢你的建议,但我在这里提到时没有看到任何这样的需要:。我将尝试向网格中添加CellEditing/RowEditing插件,并让你知道结果。我刚刚编辑了我的问题,以防这能更好地描述我的问题。哦,这就是诀窍!!!谢谢你,伙计。你让它工作:)到目前为止,在ExtJS上,任何人都能提供最快的“工作”帮助!更多关于您的方式,因为我将处理这些组合框和网格编辑和触发事件现在。如果我发现我的试验有任何问题,我非常希望有一种方法可以直接与你联系!我猜@jaux这个词很管用:)你的问题是什么?用英语?