Здравствуйте.
Я пытаюсь использовать связанные сторы в приложении, но вот ничего нормального не выходит. Может быть коллективный разум справится?
Задача: есть некий главный стор (ГС) который содержит информацию о всех юзерах приложения
Ext.define('SafetyRound.store.ProjectUser', {
extend: 'SafetyRound.store.InsistentStore',
requires: ['SafetyRound.model.view.ProjectUser'],
model: 'SafetyRound.model.view.ProjectUser',
autoLoad: true,
storeId: 'projectusersAll'
});
ГС прописан в секции stores приложения, видно что загружается.
В одном из вью у меня есть список админов. Я хотел связать его с ГС и отфильтровать по типу юзеров. Попробовал так (без фильтра пока, чисто эксперимент):
Ext.define('SafetyRound.view.projectinfo.contacts.ShowModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.projectinfo-contacts-show'
,stores: {
administrators: {
source: '{projectusersAll}'
}
}
});
Получил ошибку:
Invalid source "projectusersAll" specified for Ext.data.ChainedStore. Пробовал и с фигурными скобками, и без, разницы нет.
Следующая мысль была о том, что сорц должен быть определен во вьюмодели. Но вот как там заюзать уже имеющийся стор? Попытка:
,stores: {
src: 'projectusersAll',
administrators: {
source: '{src}'
}
}
Ошибка все та же, что в общем и не странно. ОК, решил пойти другим путем.
Забрал стор из конфигов апликухи и сконфигурировал в главной вьюмодели (чтоб был доступен и в моделях дочерних вьюшек):
Ext.define('SafetyRound.view.main.MainModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.main',
// some default data
data: {
user: {
DateFormat : 'Y-m-d',
TimeFormat: 'H:i'
}
}
,stores: {
projectusersAll : {
extend: 'SafetyRound.store.InsistentStore',
model: 'SafetyRound.model.view.ProjectUser',
autoLoad: true
}
}
});
Получил варнинг и ошибку:
[W] Ext.data.Store created with no model.
[E] Config "source" has no setter on class Ext.data.Store
Не смотря на это, приложение запустилось, вот только в гриде ни заголовков ни данных.
Наконец, я описал конфиг ГС в той-же вьюмодели:
Ext.define('SafetyRound.view.projectinfo.contacts.ShowModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.projectinfo-contacts-show'
,stores: {
projectusersAll : {
extend: 'SafetyRound.store.InsistentStore',
model: 'SafetyRound.model.view.ProjectUser',
autoLoad: true
},
administrators: {
source: '{projectusersAll}',
filters: [
function(item){
return true;
}
]
}
}
});
Вот так все работает хорошо. Но ведь это не то что я хотел... Если я в каждой модели буду описывать projectusersAll то мне и глобальный стор не нужен, просто получу кучу дублированных данных.
Вопрос: как быть?