Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Не находит модель No such Entity "Shop.model.test2.Test2" (https://javascript.ru/forum/extjs/63497-ne-nakhodit-model-no-such-entity-shop-model-test2-test2.html)

khusamov 11.06.2016 00:59

Не находит модель No such Entity "Shop.model.test2.Test2"
 
Я сделал модель Shop.model.test2.Test2

И в итоге получил ошибку

Ext.data.schema.Schema.lookupEntity(): No such Entity "Shop.model.test2.Test2".

Хотя модель Shop.model.Test он находит.

Почему модель Shop.model.test2.Test2 не находит?

khusamov 11.06.2016 01:18

интересное дело. Цифры 2 убрал, сразу нашел. Как так???

nohuhu 13.06.2016 21:16

А класс Shop.model.test2.Test2 где-нибудь указан как зависимость?

khusamov 13.06.2016 22:00

Я модели не указываю в requery. А надо?

nohuhu 13.06.2016 22:32

Конечно надо. Модель это класс, его надо загрузить. Чтобы загрузить, надо о нём знать.

khusamov 14.06.2016 00:59

Почему он тогда Shop.model.Test загрузил?
Разве в Sencha Cmd не избавились окончательно от require?

nohuhu 14.06.2016 03:16

Цитата:

Сообщение от khusamov (Сообщение 419334)
Почему он тогда Shop.model.Test загрузил?

Точно не могу сказать, не видя кода. Вероятное объяснение: модель Shop.model.Test поименована где-то просто как Test, а поскольку её namespace совпадает с таковым для всего приложения, то имя класса было получено автоматически как App namespace + '.' + model name. Если вы указали это имя в массиве models какого-либо контроллера, то примерно так и произошло.

В случае же с моделью Shop.model.test2.Test2 такой подход уже не сработает, т.к. namespace Shop.model.test2 нигде не прописано. Для таких случаев есть конфиг namespaces: http://docs.sencha.com/extjs/6.0/6.0...cfg-namespaces

Цитата:

Разве в Sencha Cmd не избавились окончательно от require?
Конечно же нет. Большую часть случаев она отлавливает, но все 100% предусмотреть в принципе невозможно. Поэтому я всегда рекомендую не играть в лотерею, а указывать requires явным образом. Экономия 10 секунд на наборе имени класса может потом обернуться потерей часов на поиски странных багов.

khusamov 14.06.2016 15:30

Цитата:

Вероятное объяснение: модель Shop.model.Test поименована где-то просто как Test, а поскольку её namespace совпадает с таковым для всего приложения, то имя класса было получено автоматически как App namespace + '.' + model name.
Конечно я нигде полное имя класса не задаю. А именно Test. И вторую модель я точно так же описываю, а именно test2.Test2, но он его не грузит, а первый грузит.

Цитата:

т.к. namespace Shop.model.test2 нигде не прописано
Как это не прописан? Точно так же я прописал (namespace: "Shop.model"). Там вообще для всех моделей у меня прописан ns. В базовой модели.

Ext.define("Shop.model.Base", {
	
	extend: "Ext.data.Model",
	
	requires: ["Ext.data.proxy.Direct"],
	
	fields: [{
		name: "id",
		type: "number"
	}],
	
	schema: {
		namespace: "Shop.model",
		urlPrefix: "Server",
		proxy: {
			type: "direct",
			api: {
				create: "{prefix}.{entityName}.create",
				read: "{prefix}.{entityName}.read",
				update: "{prefix}.{entityName}.update",
				destroy: "{prefix}.{entityName}.destroy"
			},
			//<debug>
			withCredentials: true,
			//</debug>
			reader: {
				type: "json",
				rootProperty: "data",
				messageProperty: "message"
			}
		}
	}
	
});

khusamov 14.06.2016 15:33

В общем он заработал, если убрать двойки

stores: {
		testStore: {
			model: "test.Test",
			autoLoad: true
		}
	}


Таким образом, sencha не любит в именах моделей цифры. Могли бы и написать.

khusamov 14.06.2016 15:34

Кстати, я про двойки уже писал. То есть вопрос другой теперь. Чего это сенча экст не любит цифры в именах моделей? Это дискриминация такая?


Часовой пояс GMT +3, время: 17:38.