什么是Ext.namespace,我们应该如何使用它们?

时间:2013-08-09 17:17:46

标签: javascript extjs namespaces extjs4.2

我在我正在进行的项目中遇到了Ext.namespace()
我查看了 Sencha's website ,但解释不是很有帮助。

这就是他们所说的:

  

创建用于范围变量和类的名称空间   他们不是全球性的。指定命名空间的最后一个节点   隐式创建所有其他节点。

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

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

如果这个问题看似简单或愚蠢,我道歉,但我真的想完全理解这个概念。提前致谢

这对我来说不是很清楚:

  • 如果我的JS页面顶部有Ext.namespace('Company', 'Company.data'),这是否意味着它带有所有其他函数名称和变量(如全局范围)?
  • “公司”和“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
  • 何时应该使用这个想法?

2 个答案:

答案 0 :(得分:19)

首先,Ext.ns('Company.data')大致相同:

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

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


逐点解决您的问题:

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

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

  
      
  • “公司”和“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

  •   
  • 何时应该使用这个想法?

  •   

我在上面回答了这两个问题。

答案 1 :(得分:3)

如果你想在不使用Ext.define的情况下定义自己的类,Ext.namespace真的很有用。

以下示例要求提前创建名称空间:

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

创建ExtJS类的标准方法是:

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

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