Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2015, 15:09
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Укажите storeId глобального стора в параметре source:

The backing data source for this chained store. Either a store instance or the id of an existing store.
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2015, 15:56
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

http://docs.sencha.com/extjs/5.1/5.1...ore-cfg-source

Кстати, есть песочница для тестов https://fiddle.sencha.com/
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.

Последний раз редактировалось khusamov, 09.11.2015 в 15:59.
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2015, 16:34
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Все оказалось гораздо веселее ) Я ведь не создал стор через Ext.create! Просто описал его конфиг с параметром autoload:1 , добавил в requires, а вот экземпляр то и не создал. В результате он и грузился, и не находился через сторменеджер. Добавил принудительное создание в контроллере - заработало!

Но и тут не обошлось без развлечения. Я воткнул было создание стора в метод Application.launch, так он не виделся по прежнему. А вот когда в контроллере главного вью создал - заработало!

Ext.define('SafetyRound.view.main.MainController', {
	extend: 'Ext.app.ViewController',
	alias: 'controller.main',
	init: function(){
		Ext.log('SafetyRound.view.main.MainController : init()');

		Ext.create('SafetyRound.store.ProjectUser', { // <----------------
			storeId: 'projectusersAll',
			autoLoad: true
		});
	
		if(Assets.ready){
			this.initData();
		}else{
			Assets.addListener("ready", this.initData, this, {single: true});
		}		
	}
...
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2015, 16:53
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Почему не в приложение в свойства stores?

Вот тут:
http://docs.sencha.com/extjs/5.1/5.1...ion-cfg-stores
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2015, 17:16
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Пардон, ошибся когда писал. В stores я и добавлял, не в requires, но не работало.
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2015, 17:43
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Кстати, про фидл: я попробовал в нем набросать демку, но застрял в самом начале. Посмотрите пожалуйста:
https://fiddle.sencha.com/#fiddle/10pa
Насколько я понял система не может найти мою модель. Куда ее надо поместить, в какую папку?
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2015, 19:03
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Цитата:
Куда ее надо поместить, в какую папку?
в папке Mock Data можно размещать ответы сервера или подгружаемые данные в формате json

Имя класса aModel надо заменить на Fiddle.aModel

Модель нужно перекинуть в приложение
вот так:
https://fiddle.sencha.com/#fiddle/10ph


Ext.application({
    name : 'Fiddle',
    
    models: [
        'Fiddle.aModel' // вот здесь ошибка, но это особенность фидла, не может он без нэймспейса загрузить модель
    ],

    launch : function() {
        Ext.Msg.alert('Fiddle', 'Welcome to Sencha Fiddle!');
    }
});



Ext.define('Fiddle.aModel', {// а здесь вы по невнимательности забыли пространство имен Fiddle
    extends: 'Ext.data.Model',
    fields: [
        'Name'
    ]
});
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2015, 23:58
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Так, что к чему в фидле я разобрался... Но вот как он работает - это мрак. Фидлы не удаляются, сохранение срабатывает через раз, а то и реже... Ошибки в консоли... Как с таким можно жить - не представляю. Интересно, это у всех так?
Ответить с цитированием
  #10 (permalink)  
Старый 10.11.2015, 10:14
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

У меня фидл работает отлично. Сохранение работало всегда. Хотя сегодня утром заметил тоже эту проблему. Создаю под залогининым пользователем.

Принцип работы в том, что все файлы из / собираются в один, а потом всё это исполняется.

Поиск файла по пространству имён не осуществляется. Requires указывать поэтому не обязательно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Chained Store kolka ExtJS 15 26.08.2015 13:26
ExtJS4 Обход store pauluss ExtJS 4 14.01.2013 14:25
Store: отловить событие success=false posta ExtJS 1 01.03.2012 11:55
Данные из store не успевают попадать в chart kalya ExtJS 0 02.11.2011 14:14
GridPanel "теряет" свой store при многократном вызове экземпляров GridPanel Lokich ExtJS 1 09.09.2011 10:12