Определение пространства имен с помощью ExtJs5

Я использую ExtJs 5 и SenchaCmd.

В пакете я определил несколько классов в нескольких файлах, например:

// Bar1.js
Ext.define('Foo.Bar1', {
   ...
});

// Bar2.js
Ext.define('Foo.Bar2', {
   ...
});

Теперь я хотел бы просто «дополнить» пространство имен Foo некоторыми общими инструментами вроде этого:

Ext.ns('Foo');
Foo.tool1 = function() { ... }
Foo.tool2 = function() { .... }
Foo.generalProp1 = 42;
(...)

В каком месте лучше всего было бы объявить это, чтобы компилятор Sencha также встраивал этот файл?

Возможно ли «требовать» (в некотором смысле) пространство имен, как нам нужен класс?


person Guid    schedule 24.11.2014    source источник


Ответы (1)


Вы можете использовать statics из нового Ext:

Ext.define('Foo', {
    // declare static members
    statics: {
        method: function(){ return "static method"; }
    }
});

// Define class under Foo namespace
Ext.define('Foo.OtherClass', {
    method: function(){ return "instance method"; }
});

// Create instance of Foo.OtherClass
var o = Ext.create('Foo.OtherClass');

// Use static member
console.log(Foo.method());

// Use instance member
console.log(o.method());

Затем вы можете рассматривать свое пространство имен Foo как класс и размещать как любой другой класс. Тогда, очевидно, вам также может потребоваться это пространство имен, потому что оно также является классом.

person Krzysztof    schedule 25.11.2014
comment
Спасибо. У меня 2 вопроса: 1 / Должен ли я объявить эти два пространства имен («Foo» и «Foo.OtherClass») в одном файле? 2 / Если я хочу добавить несколько ярлыков функций из Foo.OtherClass в пространство имен Foo, это сложно? - person Guid; 25.11.2014
comment
1. Нет - определите Foo в /Foo.js и OtherClass в Foo / OtherClass.js; 2. Вы можете передать обратный вызов Ext.define, который вызывается после создания класса, например: Ext.define('Name', {}, function(nameClass){}). В этом обратном вызове вы можете создавать ярлыки. Сценарий: jsfiddle.net/r59wopn5/2 - person Krzysztof; 26.11.2014