Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2015, 12:33
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

"paths processed": true
Мне пришлось дописывать вот такую хитрую инструкцию:

Ext.define("MyApp.Application", {
	extend: "Ext.app.Application",
	...
	"paths processed": true, // хитрая инструкция
	...
});


чтобы была возможность задавать путь к пространству MyApp вне класса, например в index.html.

Дело в том, что на сервере, когда я формирую файл index.html, мое ExtJS-приложение может быть где угодно быть прописанным, и сервер должен в index.html прописать путь к папке app.

Я это делаю инструкцией:

Ext.Loader.setPath("MyApp", "path/to/app");


Но в классе MyApp.Application путь перезаписывается на просто 'app' (по сути выполняет Ext.Loader.setPath("MyApp", "app"). То есть, класс Ext.app.Application попросту игнорирует уже созданное setPath() пространство в вышеупомянутой инструкции.

И я поковыряв Ext обнаружил эту хитрую опцию "paths processed". Которая сама собой говорит для чего она нужна. Но это недокументированная возможность. Хотелось бы знать, как официально это делать?

Последний раз редактировалось khusamov, 04.06.2015 в 12:56.
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2015, 12:36
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Для наглядности:

Файл index.html

...
		<script>Ext.Loader.setPath("MyApp", "path/to/app");</script>
		<script src="path/to/app.js"></script>
...


Файл path/to/app.js

Ext.application("MyApp.Application");


Файл path/to/app/MyApp.js

Ext.define("MyApp.Application", {
	extend: "Ext.app.Application",
	...
	"paths processed": true, 
	...
});

Последний раз редактировалось khusamov, 04.06.2015 в 12:41.
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2015, 12:41
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Было бы логично написать прямо в index.html нечто такое:

Ext.application("MyApp.Application", {
	folderApp: "path/to/app"
});


Но увы, метод Ext.application() такой финт не поддерживает.

Так же не работает и просто создание экземпляра класса своего приложение с попыткой задать тот же folderApp.

Или как вариант, если Ext.app.Application не игнорировал был созданное до него пространство приложения, то все работало без хаков.

Последний раз редактировалось khusamov, 04.06.2015 в 12:57.
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2015, 17:48
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

http://docs.sencha.com/extjs/5.1/5.1...-cfg-appFolder ?
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2015, 04:09
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Он переписывает эту опцию на app. Несмотря на то, что пространство уже было определено.
Ответить с цитированием
  #6 (permalink)  
Старый 08.06.2015, 08:17
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Вы когда в код смотрели, чего ж недосмотрели? Надо либо appFolder указать в классе Application, либо уж тогда и передавать его в конфиге Ext.application, чего стесняться:

Код:
Ext.define('MyApp.Application', {
    extend: 'Ext.app.Application',
    appFolder: 'foo/bar'
});

Ext.application('MyApp.Application');
Или:

Код:
Ext.application({
    name: 'MyApp',
    appFolder: 'foo/bar'
});
И ещё на всякий случай, в документации есть ссылки view source для каждого метода. Вот посмотрите, как Ext.application работает: http://docs.sencha.com/extjs/5.1/5.1...od-application.

А вот всякие недокументированные штуки лучше не трогать, боком может выйти. Я помню, что когда этот кусок MVC рефакторил, таких чудесатых чудес насмотрелся, что диву даёшься. Гремучая смесь асинхронной и синхронной загрузки классов, "декларативное" подтягивание Views/Models/Stores из контроллеров с совершенно невнятной схемой именования классов, и т.д. Оно очень хрупкое, не лезьте туда. :(
Ответить с цитированием
  #7 (permalink)  
Старый 08.06.2015, 22:46
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Ну знаете.... ))) я даже и не думал что appFolder нужно в своем классе зачем-то определять. Ведь на момент определения класса путь к приложению не определен. Он определен на момент создания экземпляра.

Ладно, попробую это сделать. А недоглядел возможно...
Ответить с цитированием
  #8 (permalink)  
Старый 09.06.2015, 03:56
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

А в классе и не обязательно, я ж показал. :)

На самом деле всё это выглядит очень странно, согласен. Ларчик открывается просто: сперва было кривое API Ext.application(), потом мы начали его выпрямлять и упёрлись рогом в обратную совместимость. Посмотрите на код Ext.application, он малость на голову чудесатый - а всё потому, что глобальные контроллеры могут мудрить с подгрузкой классов и делают это, сволочи, в обход стандартных механизмов поиска зависимостей. :(

В общем, грустно и стыдно там. Не смотрите туда…
Ответить с цитированием
  #9 (permalink)  
Старый 09.06.2015, 13:19
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

для вас он чудесатый, для меня лохматый ибо в этом лохматом лесу я почти безвылазно весь день нахожусь... Меня там удивляет, что многие классы написаны вопреки концепции config, extend и прочим... То есть вопреки своим же принципам. Из-за этого очень усложняется анализ.

Чуть позже выложу сюда результаты своей работы с этим appFolder. Надеюсь от "paths processed": true удасться избавиться раз и навсегда.
Ответить с цитированием
  #10 (permalink)  
Старый 04.08.2015, 13:43
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Возобновляю больную тему...

Создал код в песочнице: https://fiddle.sencha.com/#fiddle/rj5

Я прописал путь к приложению:

appFolder: "/my/path/to/app"


Но загружает он контроллер совсем по другому пути:

https://fiddle.sencha.com/app/controller/Root.js


И как тут можно выкрутиться без хака "paths processed": true?

Кстати, хак в песочнице не работает, а в моем проекте пашет... почему-то.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.

Последний раз редактировалось khusamov, 04.08.2015 в 18:36.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняются настройки grid Fubu_By ExtJS 1 09.07.2013 21:49
Глюк firebug'а trikadin Оффтопик 23 16.01.2012 14:04
относительная высота zmaxon ExtJS 13 04.10.2010 12:42
Окно открывается только один раз altermann ExtJS 8 22.04.2010 11:55
Правильный ответ или неправильный Kevrat Ваши сайты и скрипты 7 13.01.2010 21:31