Ext.widget() это полезная функция как раз для таких случаев, которые описывает XAPuTOH: когда имя класса или xtype становится известно только на этапе выполнения кода.
Примерно вот так:
Код:
|
var lightingType = Ext.isDay() ? 'sun' : 'moon';
var lightSource = Ext.widget({
xtype: lightingType,
...
}); |
Или даже вот так:
Код:
|
var className = globalFunctionThatReturnsClassName();
var widget = Ext.widget({
xclass: className,
...
}); |
Конечно же в подобных случаях можно использовать и Ext.create(), это будет вполне оправданно, поскольку оператор new не принимает строчные значения.
Однако я всё же рекомендую использовать Ext.widget() по двум причинам: а) эта функция более гибкая и умеет принимать xtype вместо имени класса, б) для стандартизации. Ext.create() имеет слишком размытую семантику, лучше избегать этой функции в коде даже для динамических случаев. Ext.widget() же однозначно говорит "создай мне объект по динамической информации".
Также рекомендую использовать xtype вместо прямого именования классов в коде. Это даст возможность сделать код более декларативным, что вообще очень полезно и сильно облегчает жизнь. Я когда-то давно написал на эту тему статью на StackOverflow, эта информация всё ещё актуальна:
http://stackoverflow.com/questions/1...81965#18281965