Я работаю над своим первым приложением extjs (5), и у меня есть два основных вопроса: один о структуре, а другой - технический вопрос. Мое приложение представляет собой панель администратора. У меня есть таблица базы данных с парами ключ-значение с такими настройками, как имя сайта, ключевые слова, мета-описание и так далее. Теперь я хочу создать форму, в которой пользователь может редактировать эти параметры. Моя проблема в том, что я не могу отобразить эти параметры в форме.
Вот модель для вариантов:
Ext.define('Wp.model.Option', {
extend: 'Wp.model.Base',
idProperty: 'name',
fields: [
{name: 'name', type: 'string'},
{name: 'value', type: 'string'}
]
});
У меня есть следующая точка зрения:
Ext.define('Wp.view.settings.BasicSettings', {
extend: 'Ext.form.Panel',
xtype: 'wp-basic-settings',
defaultType: 'textfield',
title: 'Grundeinstellungen',
cls: 'content-container',
requires: [
'Wp.view.settings.BasicSettingsModel'
],
viewModel: 'basic-settings',
fieldDefaults: {
labelWidth: 250,
width: '100%'
},
items: [{
bind: '{siteName}',
fieldLabel: 'Name',
allowBlank: false
},{
bind: '{lang}',
fieldLabel: 'Lokalisierung',
allowBlank: false
}],
buttons: [{
text: 'Speichern',
formBind: true,
listeners: {
}
}]
});
Если я правильно понимаю MVVC, правильным решением будет создание модели представления, которая будет получать набор опций типа Wp.model.Option и «передавать» ее представлению.
Я пробовал разные модели просмотра, но не могу заставить их работать.
Ext.define('Wp.view.settings.BasicSettingsModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.basic-settings',
requires: [
'Wp.model.Option'
],
stores: {
data: {
model: 'Wp.model.Option',
proxy: {
type: 'rest',
url: 'BasicSettings.json'
},
reader: {
type: 'json'
},
autoLoad: true
}
},
formulas: {
siteName: function (get) {
return get('data')[0].value;
},
lang: function (get) {
return get('data')[1].value;
}
}
});
Ответ, который я получаю от сервера, примерно такой:
{"data":[{"name":"siteName","value":"Some site name"},{"name":"lang","value":"en"}]}
(пробовал разные версии, с корневым элементом и rootProperty, без него, со свойством успеха, формат менять могу - не проблема).
Результат всегда один и тот же: пустые поля. Проблема, похоже, в асинхронном запросе, потому что он отлично работает с хранилищем в памяти. Но я не знаю, как я могу «ждать» запроса и затем получать значения из json, где я могу поместить что-то вроде «загрузить» прослушиватель.
Я также пробовал «ссылки:» и «ссылка» вместо «магазины:», но тогда я получаю [object Object] в полях и не знаю, что я могу с этим сделать.
Является ли моя попытка решить мою проблему по крайней мере правильной? Как я могу добиться правильного отображения материала из строки json в моей форме?
PS: за эти два дня я прочитал много материала с похожими вопросами на StackOverflow и на форуме sencha, но я не мог использовать предложенные решения для моей проблемы, так что извините, если я что-то не понимаю. Спасибо.