Мне пришлось внести некоторые изменения в нашу систему, но у меня это работает, и я решил поделиться. Я должен отдать должное этой теме за то, что она указала мне правильное направление. Простите меня заранее за проблемы с форматированием.
- Во-первых, я не мог понять, как заставить прокси вызывать функцию, поэтому просто пошел с Ext.data.proxy. Ajax подход. Для меня это немного обойдется, но это работает. Вот мой магазин и настройки прокси (он находится в состоянии компонента):
postalCodes = (props) => {
let postalCodeStore = new Ext.data.Store ({
proxy: {
type: 'ajax',
url: postalCodesApiRoutes.DROPDOWNDATA, //stores my api route information
reader: {
type: 'json',
rootProperty: 'postalCode',
totalProperty: 'totalRecordCount'
},
pageParam: 'index',
extraParams: {
pageSize: props.pageSize
},
headers: { ...authHeader(), // returns my authentication header info
<OTHER LOGGING INFO WENT HERE>
},
noCache: false
},
autoLoad: false,
pageSize: props.pageSize,
clearOnPageLoad: false
})
return postalCodeStore;
}
Ниже приведен мой конфиг ComboBoxField (примечание: мне пришлось использовать this.handlePickerCreate.bind(this)
, поскольку элементы управления sencha, по-видимому, не поддерживают привязку функции стрелки):
<ComboBoxField
displayField="value"
valueField="postalCodeId"
queryMode="remote"
store={this.state.postalCodes}
remoteFilter={true}
clearable
allQuery=""
triggerAction="all" // I want when the dropdown clicked on it ignores whats in the combobox text and queries the entire data set. Otherwise if a user types a value a server-side filter will be executed.
queryParam="filter"
onPickerCreate={this.handlePickerCreate.bind(this)}
/>
Ниже приведены функции handlePickerCreate и onScroll:
handlePickerCreate = (obj, picker) => {
picker.getScrollable().on('scroll', this.onScroll);
}
onScroll = (scroller, x, y, deltaX, deltaY, opts) => {
if (y >= scroller.getMaxPosition().y) {
let sStore = this.state.areas;
if (sStore.getTotalCount() != sStore.getCount()){
sStore.nextPage({
callback: function () {
scroller.doScrollTo(0, y);
console.log('store count', sStore.getCount())
}
});
this.setState({areas: sStore})
}
}
}
В любом случае, есть некоторые причуды, которые я пытаюсь выяснить, например, когда значение выбирается из списка, затем вы нажимаете на стрелку триггера / выпадающего меню, которую отображает сборщик, и немедленно исчезает, а поле ввода в поле со списком очищается. Я вижу вызов на сервер и возвращаемые данные, но не могу понять, что происходит. Надеюсь, это кому-нибудь поможет.