Sencha Touch - Зависимости

В Sencha Touch есть определенные способы объявления зависимостей, один внутри приложения, а другой внутри классов.

Давайте посмотрим на различные способы определения зависимостей.

Зависимости на уровне приложения

Здесь мы объявляем все зависимости при создании Ext.application.

Ext.application({
   name: 'MyApp',
   views: ['StudentsView'],
   models: ['StudentsModel'],
   controllers: ['StudentsController'],
   stores: ['StudentsStore'],
   profiles: ['Phone', 'Tablet']
});

Теперь, когда приложение загружается, все зависимости будут загружены одновременно. Путь к другим файлам будет -

  • MyApp.views.StudentsView
  • MyApp.models.StudentsModel
  • MyApp.stores.StudentsStore и т. Д.

Вышеупомянутый способ объявления не только загружает файл, но и решает, какой профиль следует оставить активным. После загрузки контроллера он обязательно создает его экземпляр. После загрузки хранилищ он создает их экземпляры и предоставляет один идентификатор, если он еще не указан.

Зависимости, зависящие от профиля

Когда мы используем профили в приложении, возможно, что некоторые функции требуются только для определенного профиля.

Зависимости, специфичные для профиля, объявляются в самих профилях, а не в декларации уровня приложения.

Ext.define('MyApp.profile.Tablet', {
   extend: 'Ext.app.Profile', config: {
      views: ['StudentView'], controllers: ['StudentController'], models: ['StudentModel']
   }
});

Зависимости загружаются независимо от того, активен профиль или нет. Однако на основе активного профиля происходит дальнейшая обработка, такая как создание экземпляра контроллера и хранилищ.

Вложенные зависимости

Когда у нас есть более крупное приложение, у нас есть несколько контроллеров, моделей, представлений и магазинов.

В более крупных приложениях всегда хорошо сохранять модульность. Для этого мы можем определить подпапки, а при объявлении зависимостей мы можем использовать имя подпапки для объявления.

Ext.application({
   name: 'MyApp',
   controllers: ['Controller', 'nested.NewController'],
   views: ['class.Cview', 'SView']
});

В приведенном выше случае будут загружены следующие файлы -

  • MyApp.controllers.Controller
  • MyApp.controllers.nested.NewController
  • MyApp.Views.Sview
  • MyApp.Views.class.Cview

Внешние зависимости

Мы можем указать зависимости вне приложения, указав полные имена классов как -

Ext.Loader.setPath({
   'Class': 'Class'
});

Ext.application({
   views: ['Class.view.LoginForm', 'Welcome'],
   controllers: ['Class.controller.Sessions', 'Main'],
   models: ['Class.model.User']
});

В приведенном выше случае будут загружены следующие файлы -

  • Class/view/LoginForm.js
  • Class/controller/Sessions.js
  • Class/model/User.js
  • app/view/Welcome.js
  • app/controller/Main.js