Я новичок здесь, в Stackoverflow и в разработке Sencha Ext JS. Я студент из Германии, и в настоящее время я пытаюсь получить степень в области компьютерных наук. Как часть моего последнего задания я в настоящее время разрабатываю пользовательский интерфейс веб-приложения для местной компании. Когда я опробовал возможности фреймворка Sencha Ext JS, я столкнулся с некоторыми проблемами, поэтому сейчас я обращаюсь к сообществу за помощью;) Моя первая проблема, с которой я столкнулся, была, когда я играл с синтаксис для создания экземпляров классов с использованием xtypes и ассоциация Stores внутри ViewModel:
В целях упрощения чтения и менее загроможденного кода я хотел дать своим магазинам свой собственный тип xtype, чтобы я мог вместо объявления всех Хранилища и их конфиги в конфигурации хранилищ ViewModels хотели, чтобы каждое хранилище находилось в их собственном файле, а затем просто создавало их экземпляр позже во ViewModel. Код, который я написал для этого, выглядит следующим образом: ViewModel:
Ext.define('Example.viewmodel.MyViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.myviewmodel',
requires: [
'Example.store.MyStore',
],
stores: {
StoreA: { xtype: 'store_a' },
StoreB: { xtype: 'store_b' },
StoreC: { xtype: 'store_c' }
},
data: {
/* This object holds the arbitrary data that populates the ViewModel and
is then available for binding. */
}
});
StoreA:
Ext.define('Example.store.StoreA', {
extend: 'Ext.data.Store',
xtype: 'store_a',
requires: [
'Example.model.ModelA'
],
storeId: 'StoreA',
autoLoad: false,
model: 'Example.model.ModelA',
listeners: {
load: 'onLoadofStoreA'
}
});
Но, видимо, это не работает… Мой загрузочный приемник магазина, похоже, не выстрелить по методу внутри моего контроллера и, похоже, даже не знает о представлении, связанном с ViewModel. Что я делаю не так или это просто не так? Моя вторая проблема была, когда я играл с некоторыми компонентами пользовательского интерфейса. Мой сценарий был такой: я хотел, чтобы у меня было меню, в которое можно было бы скользить, где вы могли бы сделать некоторые входные данные, которые бы затем загружали контент для представления. Я нашел этот пример для скользящего меню (https://examples.sencha.com/extjs/6.7.0/examples/kitchensink/?modern#menus) и построил это: Внутри моего ViewController:
getMenuCfg: function (side) {
var cfg = {
side: side,
controller: example_controller',
id: 'topMenu',
items: [
{
xtype: 'container',
layout: 'hbox',
width: '100%',
items: [
{
xtype: 'fieldset',
reference: 'fldSet',
id: 'fldSet',
layout: 'vbox',
width: '50%',
defaults: {
labelTextAlign: 'left'
},
items: [
{
autoSelect: false,
xtype: 'selectfield',
label: 'Selectfield',
reference: 'sfExample',
id: 'sfExample',
listeners: {
change: 'onSFChange'
}
},
{
xtype: 'container',
layout: {
type: 'hbox',
align: 'end',
pack: 'center'
},
items: [{
xtype: 'textfield',
reference: 'ressource',
id: 'ressource',
flex: 1,
textAlign: 'left',
margin: '0 10 0 0',
label: 'Ressource',
labelAlign: 'top',
labelTextAlign: 'left',
editable: false,
readOnly: true
},
{
xtype: 'button',
shadow: 'true',
ui: 'action round',
height: '50%',
iconCls: 'x-fa fa-arrow-right',
handler: 'openDialog'
}
]
},
{
xtype: 'textfield',
reference: 'tfExample',
id: 'tfExample',
label: 'Textfield',
editable: false,
readOnly: true
}
]
},
}]
}];
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я больше не буду возможность легко получить ссылки на компоненты внутри меню (поля ввода) с помощью this.lookupReference()
, как если бы они были только частью представления. Фактически, чтобы найти обходной путь, мне пришлось проследить путь назад к компонентам, используя отладчик. Например, если другой метод внутри моего контроллера хотел использовать поле внутри этого меню, вместо того, чтобы просто делать this.lookupReference(‘sfExample’)
, я теперь должен был сделать что-то вроде этого:
var me = this,
vm = me.getViewModel(),
menuItems = me.topMenu.getActiveItem().getItems(),
fieldset = menuItems.getByKey('fldSet'),
selectfieldRessArt = fieldsetLeft.getItems().getByKey('sfExample');
Я почти уверен, что я Я упускаю что-то важное здесь, и должен быть способ сделать это проще. Очень жду ваших ответов, заранее благодарю;)