ExtJS: Widget Combo сбрасывает значение для всех полей, когда я нажимаю на раскрыть
Я использую treePanel
в котором один столбец использует widgetColumn
с комбо внутри клетки.
Ниже приведен пример кода.
{
text: 'TC',
dataIndex: 'scrTC',
xtype: 'widgetcolumn',
widget: {
xtype: 'combo',
store: 'TCStore',
valueField: 'value',
displayField: 'displayValue',
matchFieldWidth: false,
}
}
Когда я изменяю значения комбо для нескольких строк, а затем расширяю другие дочерние элементы в сетке, все комбо-значения снова сбрасываются до значения по умолчанию. Не знаю, в чем здесь проблема.
Код для магазина:
Ext.define('TC', {
extend: 'Ext.data.Store',
storeId: 'TCStore',
model: 'CommonModel',
autoLoad: true,
proxy: {
type: 'ajax',
url: 'resources/data/tree/TC.json'
}
});
Скриншот панели дерева:
Когда я нажимаю на другой дочерний узел, например 3 или 4, он сбрасывает значение для всех комбо во всех строках.
Спасибо за помощь.
Код изменяется после ответа ниже, что дает неопределенную ошибку getRecord.
Ext.define('MyTree', {
extend: 'Ext.tree.Panel',
reference: 'myTree',
columns: {
item:[{
text: 'TC',
dataIndex: 'scrTC',
xtype: 'widgetcolumn',
widget: {
xtype: 'combo',
store: 'TCStore',
valueField: 'value',
displayField: 'displayValue',
matchFieldWidth: false,
listeners: {
change: function (combo) {
if (combo.hasFocus) {
var treeview = combo.up('myTree'), //myTree is reference of my treepanel
record = treeview.getRecord(combo.el.up('tr')); ///getting error here
record.set('scrTC', combo.getValue());
}
}
}
}
}]
}
});
2 ответа
Я нашел решение,
select: function (combobox, record) {
combobox.getWidgetRecord().set(combobox.getWidgetColumn().dataIndex, record.data.value);
}
это решает мою проблему.
Вы используете собственность dataIndex: 'scrTC'
и вы просто измените значение вашего комбо, а не это scrTC
, Когда ваш узел разворачивается или разворачивается, значит, он снова становится таким же scrTC
значение.
Так что вам нужно изменить значение scrTC
, когда вы меняете значение вашего комбо.
Вы можете проверить здесь с работающей FIDDLE
КОД СНИПЕТТ
Ext.application({
name: 'Fiddle',
launch: function () {
Ext.create('Ext.data.Store', {
storeId: 'TCStore',
autoLoad: true,
proxy: {
type: 'ajax',
url: 'TC.json'
}
});
Ext.create('Ext.data.TreeStore', {
storeId: 'treeStore',
fields: ['name'],
root: {
name: 'Root',
expanded: true,
scrTC: 1,
children: [{
name: 'One',
scrTC: 2,
children: [{
name: 'Child 1',
scrTC: 3,
leaf: true
}, {
name: 'Child 2',
scrTC: 4,
leaf: true
}]
}, {
name: 'Two',
scrTC: 5,
leaf: true
}]
},
});
Ext.create('Ext.tree.Panel', {
store: 'treeStore',
renderTo: Ext.getBody(),
title: 'Tree Panel Demo',
columns: {
defaults: {
width: 200
},
items: [{
xtype: 'treecolumn',
dataIndex: 'name'
}, {
xtype: 'widgetcolumn',
dataIndex: 'scrTC',
widget: {
xtype: 'combo',
store: 'TCStore',
valueField: 'value',
displayField: 'displayValue',
matchFieldWidth: false,
listeners: {
change: function (combo) {
if (combo.hasFocus) {
var record = combo.getWidgetRecord(),
property = combo.getWidgetColumn().dataIndex;
record.set(property, combo.getValue());
}
}
}
}
}]
}
})
}
});