Вход

Просмотр полной версии : RowEditing и combobox - при изменении отображается "dataindex"


Lexxx_HU
24.07.2014, 12:38
Здравствуйте, прошу помоши
RowEditing и combobox - при изменении отображается "dataindex"
а необходимо чтоб отображалось "displayField"
заранее спасибо

http://i65.fastpic.ru/big/2014/0724/46/d7cef656f6d993bc17657486ba5b6b46.gif


Ext.define('ModelLib', {
extend: 'Ext.data.Model',
fields: [
'trID',
'trName'
]
});
var storeServer = Ext.create('Ext.data.Store', {
autoDestroy: true,
model: 'ModelLib',
proxy: {
type: 'ajax',
api: {
read: '/api.php?lib=server&act=get'
},
reader: {
type: 'json',
root: 'fields',
idProperty: "trID"
}
},
sorters: [{
property: 'trID',
direction: 'ASC'
}]
});
storeServer.load();

Ext.define('ModelMainobjects', {
extend: 'Ext.data.Model',
fields: [
{name: 'trServerID', type: 'int'}
]
});

var store = Ext.create('Ext.data.Store', {
// destroy the store if the grid is destroyed
autoDestroy: true,
autoSync : true,
model: 'ModelMainobjects',
proxy: {
type: 'ajax',
api: {
read: '/api.php?lib=mainobjects&act=get',
update: '/api.php?lib=mainobjects&act=update'
},
reader: {
type: 'json',
root: 'fields',
idProperty: "trID"
},
writer: {
type: 'json'
}
},
sorters: [{
property: 'trID',
direction: 'ASC'
}]
});

store.load();

var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
clicksToMoveEditor: 1,
autoCancel: false
});

var rowRenderer = function(val) {
var rec = storeServer.findRecord('id', val);
return rec !== null ? rec.get("trName") : ''
};


var grid = Ext.create('Ext.grid.Panel', {
store: store,
columns: [
{
header: 'Сервер',
dataIndex: 'trServerID',
renderer: rowRenderer,
editor: {
xtype: 'combobox',
store: storeServer,
queryMode: 'local',
displayField: 'trName',
valueField: 'trID'
}
}],
width: 600,
height: 400,
plugins: [rowEditing]
});

Makarov
24.07.2014, 13:17
Ага, распространенная проблема

Готовые решения:
Айн:
http://www.sencha.com/forum/showthread.php?222843-How-display-combobox-displayValue-in-RowEditing
Цвай:
http://stackoverflow.com/questions/8837036/extjs-using-roweditor-with-combo-not-working-properly

Lexxx_HU
24.07.2014, 14:54
собственно именно с этого сообщения я и взял код ))

http://www.sencha.com/forum/showthread.php?222843-How-display-combobox-displayValue-in-RowEditing&p=841173&viewfull=1#post841173

из того что понял, если я делаю статичный store - то все работает
если динамический - то не работает

статичный
var storeServer = Ext.create('Ext.data.Store', {
fields:['trID', 'trName'],
data:{'items':[
{ 'trID': 1, 'trName': 'Server 1' },
{ 'trID': 2, 'trName': 'Server 2' }
]},
proxy: {
type: 'memory',
reader: {
type: 'json',
idProperty: "trID",
root: 'items'
}
}
});

динамический
var storeServer = Ext.create('Ext.data.Store', {
fields:['trID', 'trName'],
proxy: {
type: 'ajax',
api: {
read: '/api.php?lib=server&act=get'
},
reader: {
type: 'json',
root: 'fields',
idProperty: "trID"
}
}
storeServer.load();

Lexxx_HU
24.07.2014, 15:01
кажется разобрался, сам же отвечаю на свой вопрос (может кому поможет)

для первой редакции кода заменил объявление модели на
Ext.define('ModelLib', {
extend: 'Ext.data.Model',
fields: [
{name: 'trID', type: 'int'},
{name: 'trName', type: 'string'}
]
});

то есть для полей модели важно указать их тип, иначе render не находит (в store мы сказали что trServerId - int, а нам для storeServer trID пришла строка)