Что такое Ext.namespace, как их использовать?
Я встретил Ext.namespace()
в проекте, над которым я работаю.
Я смотрел сайт Sencha, и объяснение было не очень полезно.
Вот что они говорят:
Создает пространства имен, которые будут использоваться для переменных переменных и классов, поэтому что они не являются глобальными. Указание последнего node пространства имен неявно создает все остальные узлы.
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')
нет "Company", как в Ext.namespace
?
- Что это значит
Specifying the last node of a namespace implicitly creates all other nodes
?
- Когда нужно использовать эту идею?
Ответы
Ответ 1
Во-первых, это то, что 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')
нет "Company", как в Ext.namespace
?
Потому что подразумевается "Компания". То есть, Ext.ns('Company',
'Company.data')
выглядит следующим образом:
if (!Company) var Company = {};
if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};
Это облегчает понимание того, почему первая "компания" является избыточной.
Я ответил на эти два вопроса.
Ответ 2
Ext.namespace действительно полезно, только если вы хотите определить свои собственные классы, не используя Ext.define.
В приведенном ниже примере требуется, чтобы пространство имен создавалось раньше времени:
Company.data.Form = Ext.extend(...); //this is the old way of defining classes
Стандартный способ создания классов ExtJS:
Ext.define('Comany.data.Form', {...});
Этот метод автоматически создает пространства имен.