16

Ext.namespace()我在我正在从事的项目中遇到过。
我查看了Sencha 的网站,解释不是很有帮助。

这就是他们所说的:

创建用于范围变量和类的命名空间,以便它们不是全局的。指定命名空间的最后一个节点会隐式创建所有其他节点。

Ext.namespace('Company', 'Company.data');

他们还提到这Ext.ns('Company.data')是可取的。

如果这个问题看起来简单或愚蠢,我深表歉意,但我真的很想完全理解这个概念。提前致谢

这对我来说不是很清楚:

  • 如果我Ext.namespace('Company', 'Company.data')的 JS 页面顶部有,这是否意味着它包含所有其他函数名称和变量(如全局范围)?
  • 'Company' 和 'Company.data' 究竟代表Ext.namespace('Company', 'Company.data')什么?
  • 为什么新公约Ext.ns('Company.data')中没有“公司” Ext.namespace
  • 这是什么意思Specifying the last node of a namespace implicitly creates all other nodes
  • 什么时候应该使用这个想法?
4

2 回答 2

24

首先,这Ext.ns('Company.data')也是大致等价的:

if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};

基本上,它只是定义对象深层嵌套结构的捷径。如果您的项目以这种方式构建,这将很有用;我见过带有 Java 后端的项目 com.company.app.data.package在 JavaScript 中重复了包名称,这 Ext.ns是一个很好的捷径。


逐点解决您的问题:

  • 如果我Ext.namespace('Company', 'Company.data')的 JS 页面顶部有,这是否意味着它包含所有其他函数名称和变量(如全局范围)?

不,您必须添加到Company.Data,例如Company.Data.newVal = 5;

  • 'Company' 和 'Company.data' 究竟代表Ext.namespace('Company', 'Company.data')什么?

它们是您根据项目约定选择的名称。

  • 为什么新公约Ext.ns('Company.data')中没有“公司” Ext.namespace

因为隐含了“公司”。也就是说,Ext.ns('Company', 'Company.data')就像:

if (!Company) var Company = {};
if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};

这使得更容易看出为什么第一个“公司”是多余的。

  • 这是什么意思Specifying the last node of a namespace implicitly creates all other nodes

  • 什么时候应该使用这个想法?

我在上面回答了这两个。

于 2013-08-09T17:36:27.897 回答
3

Ext.namespace 只有在您想定义自己的类而不使用 Ext.define 时才真正有用。

下面的示例需要提前创建命名空间:

Company.data.Form = Ext.extend(...); //this is the old way of defining classes

创建 ExtJS 类的标准方法是:

Ext.define('Comany.data.Form', {...});

此方法会自动为您创建命名空间。

于 2013-08-09T17:41:30.387 回答