В самом деле, вы не должны делить магазины между компонентами. Это может быть контр-интуитивно понятным, но в хранилище не представлены все данные, но только подмножество компонента в настоящее время работает с. Интерфейс ко всем данным является прокси-сервером.
component <=> store <=> proxy <=> actual data
Итак, если вы хотите обмениваться данными, то вам необходимо предоставить прокси-сервер, а не магазин.
Вот, например, как исправить вашу скрипку:
var proxy = Ext.create('Ext.data.proxy.Memory', {
reader: 'json',
data : [
{'id':0,"FirstName":"Frédéric", "LastName":"Bastiat"},
{'id':1,"FirstName":"John", "LastName":"Alcatraz"},
{'id':2,"FirstName":"Nasha", "LastName":"Cartoga"}
//...
]
});
var store1 = Ext.create('Ext.data.Store', {
proxy: proxy,
fields: ['id','FirstName', 'LastName'],
remoteFilter:true,
remoteSort:true,
filters: [{property: 'id', value: 1}]
});
var store2 = Ext.create('Ext.data.Store', {
proxy: proxy,
fields: ['id','FirstName', 'LastName'],
remoteFilter:true,
remoteSort:true,
filters: [{property: 'id', value: 2}]
});
// Create the combo box, attached to the states data store
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Name',
store: store1,
id: 'nameCombo',
queryMode: 'local',
displayField: 'FirstName',
valueField: 'FirstName',
displayTpl: Ext.create('Ext.XTemplate',
'<tpl for=".">',
'<tpl if="FirstName">',
'{FirstName}',
'</tpl>',
' ',
'<tpl if="LastName">',
'{LastName}',
'</tpl>',
'</tpl>'),
renderTo: Ext.getBody()
});
// Create the combo box, attached to the states data store
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Name',
id: 'nameCombo2',
queryMode: 'local',
displayField: 'FirstName',
valueField: 'FirstName',
store: store2,
displayTpl: Ext.create('Ext.XTemplate',
'<tpl for=".">',
'<tpl if="FirstName">',
'{FirstName}',
'</tpl>',
' ',
'<tpl if="LastName">',
'{LastName}',
'</tpl>',
'</tpl>'),
renderTo: Ext.getBody()
});
Теперь, ваш следующий вопрос, вероятно, будет о том, как получить ваши стороны сервера данные в этот прокси-сервер памяти на стороне клиента ... К сожалению , рамки не предлагают никакого решения из коробки.
Самый простой способ - это, вероятно, загрузить ваши данные с помощью обычного запроса AJAX, поместить его в прокси-сервер памяти и передать этот прокси во все ваши магазины.
Или вы можете стать творческим и попытаться реализовать свой собственный прокси-сервер, который смешивает загрузку с сервера и кеширование на клиенте. Этого довольно просто добиться, переопределив прокси-сервер памяти, но скоро вы столкнетесь с кучей сложных вопросов ... Как обрабатывать кеширование для операций с разными параметрами? Как обрабатывать параметры запроса вообще? Как насчет других операций CRUD, кроме чтения? И т. Д. Если вы хотите все равно попробовать, вы можете посмотреть на this extension для вдохновения (написано для Touch, поэтому вы не можете использовать его напрямую, но принципы для OSJ) одинаковы.
Технически я не помещал все данные, которые у меня были выше, но у меня уже есть прокси-установка, но это настройка на моделях. Не будет ли прокси на модели делать примерно то же самое? Или есть какой-то параметр, который мне нужно установить для его использования прокси каждый раз при создании combobox? –
Вы хотите, чтобы ваш прокси был общим, поэтому, если он настроен в модели, это хорошо. То, что вы хотите избежать, - это обмен экземпляром магазина, как вы делаете в своей скрипке. Возможно, мой пример кода не дал понять, что будут созданы 2 разных магазина, я отредактировал его, чтобы сделать его очевидным. – rixo
Итак, тогда мне нужно будет создать новый магазин для каждой из них? Разве нет динамичного способа сделать так, чтобы все comboboxes получали новый магазин, а не текущий глобальный магазин? Я собираюсь возиться с параметром «store» в combobox, но не уверен, что это многое сделало бы. –