我正在尝试Extjs,并且正在尝试这种情况:我有一个组合框,它将默认显示层次结构中的第一级。也就是说:
0001
0001.0002
0001.0002.0004
0001.0003
0005
第一级为0001
和0005
。如果我选择0001
,它将进入restapi并获取0001.0002
和0001.0003
。该行为正在按预期方式工作。我的问题是:我必须在相同的组合框中显示获取的数据,并保持选择我首先选择的项目。我的组合正在做的是加载数据,但不选择所有内容。这是我到目前为止所做的:
var store = Ext.create('mycomponents.store.mystore', {});
var selectedText = '';
var autoSelec = false;
Ext.define('mycomponents.view.myview', {
extend: 'Ext.container.Container',
id: 'myview',
alias: 'widget.newComponent',
xtype: 'myview',
items: [
{
xtype: 'combobox',
reference: 'levels',
publishes: 'value',
fieldLabel: 'Options',
displayField: 'val',
valueField: 'val',
queryMode: 'local',
lastQuery: '',
emptyText: 'Please select...',
anyMatch: true,
anchor: '-15',
store: store,
minChars: 0,
typeAhead: true,
triggerAction: 'all',
selectOnFocus:true,
typeAheadDelay: 100,
labelWidth: 100,
labelAlign: 'right',
width: 265,
pageSize: 0,
clearFilterOnBlur: true,
defaultValue: 0,
matchFieldWidth: false,
allowBlank: false,
forceSelection: true,
enableKeyEvents: true,
onTrigger2Click: function (args) {
this.select(this.getStore().getAt(0));
},
listeners: {
select: function (combo, record, eOpts) {
console.log('Select', combo, record, eOpts);
},
change: function (item, newValue, oldValue) {
if (!autoSelec && newValue !== oldValue && !store.isLoading() && item.selection) {
if (newValue) {
selectedText = newValue;
}
store.proxy.extraParams = {
sort: 'clave',
'filter[activo]': true,
'filter[idpadre]': item.selection.data.idelemento
};
store.load({
callback: function () {
var items = store.data.items;
if (items.length) {
console.log('MY STORE >>>', items);
}
autoSelec = true;
}
});
}
}
}
}
],
initComponent: function () {
this.callParent(arguments);
var that = this;
}
});
如何在商店加载后将先前选择的项目设置为选择项目,从而不允许重新加载商店?
答案 0 :(得分:0)
经过一整天的搜索和阅读,我找到了解决方案。也许这听起来很幼稚,但我是从Extjs开始的。
这是解决方案:
var items = store.data.items;
store.insert(0, mypreviousElement);
item.setValue(items[0]);
item.focus();
从这里开始,item是我的组合...这是store.load
之后的回调,希望对您有所帮助。