2016-10-12 6 views
0

У меня есть многостраничное приложение, которое я перенес из EXT JS 6 (одностраничное приложение) в рабочее пространство (ext JS 6).Multipage App - EXT JS 6 - Package (404)

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

Моя проблема в том, что у меня есть одна страница (приложение рабочего пространства), которая работает нормально, находя все файлы, которые она нуждается и проведение на очень хорошо.

другую страницу (то же самое рабочее пространство, отдельное приложение) не работает, он получает 404 ищет файлы (404-ки, потому что он смотрит в неправильном каталоге)

APP.JSON Я прошел через файл app.json и рассказал ему, какие именно пакеты использовать. Он идентичен в обоих приложениях.

Путь к классу Я не коснулся ClassPath для любого приложения. Таким образом, они все еще идентичны друг другу.

App 1 (стр.1) ищет файл в моем пакете, перейдя на:

http://localhost/packages/local/page/src/store/file.js 

App 2 (page2) Похоже на тот же файл, перейдя в:

http://localhost/App2/store/file.js 

Я запустил sencha cmd и не имел ошибок

sencha app refresh 
sencha app build 

Все, что я могу думать об этом, должно иметь значение здесь, было проверено и перепроверено;

Итак, вопрос: - Почему Sencha Cmd проверяет, существует ли файл в определенном месте? - Почему в этом случае было бы неправильно? - Какие параметры конфигурации и gotcha's я могу пропустить?

EDIT:

Я только что нашел и запустить следующее:

C:\Development\workspaces\e\e\app1>sencha app explain "testapp.store.Locale" 
Sencha Cmd v6.2.0.46 
[INF] Loading app json manifest... 
[INF] Loading classes... 
[INF] Gathering dependencies... 
"edited"\sencha-compiler\app\full-page-master-bundle.js 
    (@require file.js) 
     --> e\app1\app.js 
      e\app1\app.js:6 (Ext.require) 
       (config) 
       --> packages\local\page\src\store\Locale.js 





C:\Development\workspaces\e\e\app2>sencha app explain "testapp.store.Locale" 
    Sencha Cmd v6.2.0.46 
    [INF] Loading app json manifest... 
    [INF] Loading classes... 
    [INF] Gathering dependencies... 
     "edited"\sencha-compiler\app\full-page-master-bundle.js 
     (@require file.js) 
     --> e\app2\app.js 
      e\app2\app.js:6 (Ext.require) 
      (config) 
      --> packages\local\page\src\store\Locale.js 

, который выглядит, как он говорит мне App2 имеет правильный путь в конфигурации ... (ощущению как I 'we found a bug)

+0

Какое имя пакета и какие имена приложений App1 и App2? – Alexander

+0

Имя пакета - «страница», и оба приложения называются «testapp» (да, это, вероятно, плохая практика, но для этого я должен был сделать это именно так, пока я заканчиваю перенос приложения из одного приложения в настройку рабочей области. – TolMera

+0

О да, пакет именуется как страница, но декларации внутри тоже являются testapp ... Я понимаю, что это действительно должно путать вещи, но я не мог исправить это, потому что это корсетные 6000+ файлов, которые составляют более широкое приложение. – TolMera

ответ

2

Похоже, вы сталкиваетесь с проблемами с конфигурацией Ext.Loader. Из комментариев кажется, что вы используете одно и то же пространство имен корней как в пакете, так и в тестовом приложении. Проблема в том, что Ext.Loader будет отображать пространство имен в расположение файла. Получите неправильное сопоставление, и вы можете посмотреть не в том месте.

Самый простой ответ - убедиться, что пакет и приложение имеют что-то другое в пространстве имен. Это может означать изменение префикса (например, MyPackage по сравнению с MyApp) или с многоуровневым пространством имен (MyStuff.package против MyStuff.app). Последнее заключается в том, как сама организация ExtJS.

Одно место для поиска - сгенерированное classic.json для приложения. Этот файл используется процессом начальной загрузки, и он имеет список всех найденных классов и где этот класс живет относительно приложения. (Я предлагаю сначала сделать довольно печатное форматирование, так как все это одна строка). Проверьте, есть ли у вас имя класса, которое вы ищете в нем, и каков путь.

... 
"classes": { 
    ... 
    "Ext.Ajax": { 
     "alias": [], 
     "alternates": [], 
     "idx": 43 
    }, 
    ... 
}, 
... 
"loadOrder": { 
    .... 
    { 
     "idx": 43, 
     "path": "../ext-6.2.0/packages/core/src/Ajax.js", 
     "requires": [ 
      42 
     ], 
     "uses": [] 
    }, 
    .... 
}, 
... 
"paths": { 
    "Ext": "../ext-6.2.0/classic/classic/src", 
    .... 
    "Ext.Ajax": "../ext-6.2.0/packages/core/src/Ajax.js", 
    ... 
}, 
... 

Раздел paths является решающей частью. В приведенном выше примере вы узнаете, как он существует для пространства имен (Ext), а другой для файла (Ext.Ajax). Если код приложения хочет загрузить ссылку на класс , но не в разделе paths, он находит самое длинное совпадение в пространстве имен классов и ищет в этом каталоге.

+0

Отличный ответ спасибо. Оказалось, что это другая ошибка, но это отличное объяснение и уже помогло :) Спасибо. – TolMera

+0

Просто любопытно, есть ли способ Sencha Cmd или регенерировать файлы Path? В любом случае, мне это может понадобиться. – TolMera

+0

«classic.json» (и его коллега 'modern.json'), а также файл' bootstrap.js', обновляется во время загрузки sencha appstore. Это называется частью сборки, и я думаю, что часть обновления sencha app refresh' –