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 等

上述声明方式不仅加载文件,还决定哪个配置文件应保持活动状态。加载控制器后,它确保实例化它。一旦商店被加载,它就会实例化它们并提供一个 id(如果尚未给出)。

配置文件特定的依赖关系

当我们在应用程序中使用配置文件时,可能仅某些特定配置文件需要很少的功能。

配置文件特定的依赖关系是在配置文件本身而不是应用程序级别声明中声明的。

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']
});

在上述情况下,将加载以下文件 -

  • 类/视图/LoginForm.js
  • 类/控制器/Sessions.js
  • 类/模型/User.js
  • 应用程序/视图/Welcome.js
  • 应用程序/控制器/Main.js