Тема: Chained store
Показать сообщение отдельно
  #1 (permalink)  
Старый 09.11.2015, 14:15
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Chained store
Здравствуйте.

Я пытаюсь использовать связанные сторы в приложении, но вот ничего нормального не выходит. Может быть коллективный разум справится?

Задача: есть некий главный стор (ГС) который содержит информацию о всех юзерах приложения
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 то мне и глобальный стор не нужен, просто получу кучу дублированных данных.

Вопрос: как быть?

Последний раз редактировалось Infarch, 09.11.2015 в 14:20.
Ответить с цитированием