2014-11-24 6 views
2

Я использую ExtJs 5 и SenchaCmd.Определение пространства имен с помощью ExtJs5

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

// 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 Compiler тоже вставлял этот файл?

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

ответ

3

Вы можете использовать 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 имен, как класс, и место, как и любой другой класс. Тогда, очевидно, вы также можете потребовать это пространство имен, потому что оно также является классом.

+0

Спасибо. У меня есть 2 вопроса: 1/Должен ли я объявить эти два пространства имен ('Foo' и 'Foo.OtherClass') в том же файле? 2/Если я хочу добавить несколько ярлыков функций из Foo.OtherClass в пространстве имен «Foo», сложно ли это? – Guid

+2

1. Нет - определить Foo в /Foo.js и OtherClass в Foo/OtherClass.js; 2. Вы можете передать обратный вызов в 'Ext.define', который вызывается после создания класса, например .:' Ext.define ('Name', {}, function (nameClass) {}) '. В этом обратном вызове вы можете создавать ярлыки. Fiddle: http://jsfiddle.net/r59wopn5/2/ – Krzysztof

+0

Отличный ответ! Большое спасибо. – Guid

Смежные вопросы