В чем смысл Ext.apply по сравнению с простым заданием значений для цели? - PullRequest
10 голосов
/ 11 марта 2011

Используя Ext.js или sencha, какой смысл делать следующее:

Ext.apply(app.views, {
        contactsList: new app.views.ContactsList(),
        contactDetail: new app.views.ContactDetail(),
        contactForm: new app.views.ContactForm()
    });

В отличие от этого стандартного javascript:

app.views.contactsList = new app.views.ContactsList();
app.views.contactDetail = new app.views.ContactDetail();
app.views.contactForm = new app.views.ContactForm();

Есть ли разница?

Ответы [ 3 ]

11 голосов
/ 11 марта 2011

Ext.apply, как правило, более удобен (и, возможно, более эффективен, если требуется меньше поисков в цепочке активации, как в вашем примере, хотя это и незначительный момент).Существует также вариант Ext.applyIf, который применяет только элементы из исходного объекта, которых нет в целевом объекте, что еще более полезно, поскольку избавляет вас от загрузки ручных проверок if().Это действительно полезно, например, при применении значений по умолчанию к объекту конфигурации, которому уже могут быть назначены свойства, определенные пользователем или приложением.

Примечание для будущих читателей, которые посмотрят на принятый ответ: Ext также имеет Ext.extendчто фактически означает «наследовать» от класса , в отличие от Ext.apply[If], который просто сливает экземпляр объекта в другой, или Ext.override, который переопределяет (без подклассов) определение класса.Много вариантов, в зависимости от того, что вам нужно.

8 голосов
/ 11 марта 2011

В основном это удобный метод для кода, который принимает объект в качестве аргумента и должен объединить его.Объединение объектов является распространенным случаем использования в JavaScript, и этот тип помощника реализуется большинством фреймворков.($.extend в jQuery, Object.extend в Prototype, Object.append в MooTools и т. Д.)

В вашем случае есть небольшая разница, кроме предложения чуть более читаемого кода.

1 голос
/ 09 августа 2011

Вам необходимо Ext.apply, если вы используете Ajax-запросы для получения конфигураций с сервера. Поскольку ответы Ajax принимаются позже, после отображения окна. Вторая часть вашего кода не будет работать.

...