Показать сообщение отдельно
  #13 (permalink)  
Старый 05.04.2016, 22:29
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

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
Ответить с цитированием