Я использую ExtJS 4.2. Я использую приведенный ниже код для отображения поля со списком в сетке ExtJS. Это моя первая попытка использовать Combobox внутри Grid, и моя конечная цель — несколько уровней выше этого. Но я застрял на первом шаге, то есть добавить поле со списком и отобразить результат 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, возвращенный из бэкэнда: {"sucess":true,"secureUsers":[{"username":"admin","id":1},{"username":"super","id":2 },{"имя пользователя":"пользователь","id":3}]}
В результате получается просто таблица с двумя заголовками ID и именем пользователя, а также записи, перечисленные одна за другой. Но я не вижу никаких полей со списком для имени пользователя в каждой строке. Даже когда я нажимаю, они не превращаются в поля со списком (я где-то читал, что такое поведение). Кроме того, я не вижу ошибок времени выполнения в инструменте отладчика.
Можете ли вы сказать мне, где я ошибаюсь? Это потому, что я использую один и тот же пользовательский магазин как для сетки, так и для комбо?