我在我正在进行的项目中遇到了Ext.namespace()
。
我查看了 Sencha's website ,但解释不是很有帮助。
这就是他们所说的:
创建用于范围变量和类的名称空间 他们不是全球性的。指定命名空间的最后一个节点 隐式创建所有其他节点。
Ext.namespace('Company', 'Company.data');
他们还提到Ext.ns('Company.data')
更可取。
如果这个问题看似简单或愚蠢,我道歉,但我真的想完全理解这个概念。提前致谢
这对我来说不是很清楚:
Ext.namespace('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
?答案 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', {...});
此方法会自动为您创建名称空间。