AsG*_*ets 4 extjs extjs4 extjs4.1
我有一个带有JsonStore和queryMode的ExtJS 4.1组合框:'remote',具有分页和过滤功能,如下所示:
... queryMode: 'remote', allowBlank: true, forceSelection: true, autoSelect: false, pageSize: 25, typeAhead: true, minChars: 2, ...
当我在此组合框中加载带有保存值的表单时,我加载商店将保存的值作为查询(过滤)参数传递,以确保所选值肯定在返回的记录中,然后我设置该值作为组合选择的值如下:
mycombo.getStore().load({
params: {
query: displayField
},
scope: {
field: combo,
valueField: valueField,
displayField: displayField
},
callback: function(records, operation, success) {
this.field.setValue(this.valueField);
}
});
到目前为止,这么好,以上工作正常.问题是,如果用户然后单击下拉箭头为组合选择另一个值,则加载商店的第一页,删除所有先前选择的值,即使没有选择任何内容,先前选择的值也会丢失.
这个问题是通用的,与这个问题非常相似: ExtJS分页组合与远程JSON存储.使用分页显示所选值, 可以这样总结:
在具有远程存储和分页的ExtJS组合框中,当加载的页面更改时,选定的值将丢失.
我尝试设置clearOnPageLoad: false商店,但每次加载新页面时,记录都会附加到列表的末尾.我本来希望这个参数缓存加载的页面,并在来回移动时仍然显示正确的页面.
那么,关于如何在页面之间移动时保持所选值的任何想法?我想我可以手动创建一个带有所选值的记录,并在每个页面加载时将其附加到商店,直到选择了一个新值,但这听起来像是太费力了.
我们最终联系了Sencha支持,因为我们有付费许可证.这是我们得到的答案:
Ext.override(Ext.form.field.ComboBox, {
onLoad: function() {
var me = this,
value = me.value;
if (me.ignoreSelection > 0) {
--me.ignoreSelection;
}
if (me.rawQuery) {
me.rawQuery = false;
me.syncSelection();
if (me.picker && !me.picker.getSelectionModel().hasSelection()) {
me.doAutoSelect();
}
}
else {
if (me.value || me.value === 0) {
if (me.pageSize === 0) { // added for paging; do not execute on page change
me.setValue(me.value);
}
} else {
if (me.store.getCount()) {
me.doAutoSelect();
} else {
me.setValue(me.value);
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)