В чем смысл Ext.apply или просто устанавливать значения для цели?
Используя 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();
Есть ли разница?
Ответы
Ответ 1
В основном это метод удобства для кода, который принимает объект как аргумент, и ему необходимо объединить его. Объединение объектов является распространенным прецедентом в JavaScript, и этот тип помощника реализуется большинством фреймворков. ($.extend
в jQuery, Object.extend
в Prototype, Object.append
в MooTools и т.д.)
В вашем случае есть небольшая разница, кроме предложения более читаемого кода.
Ответ 2
Ext.apply
, как правило, более удобен (и, возможно, более эффективен, если требуется меньше поисковых запросов активации, как в вашем примере, хотя это небольшая точка). Существует также вариант Ext.applyIf
, который применяет только те элементы исходного объекта, которые не существуют в целевом объекте, что еще более полезно, поскольку оно избавляет вас от загрузки ручных проверок if()
. Это действительно полезно, например, при применении умолчаний к объекту конфигурации, у которого уже могут быть назначены пользовательские или определенные приложения.
Примечание для будущих читателей, которые рассматривают принятый ответ: Ext также имеет Ext.extend
, который на самом деле означает "наследовать" от класса, а не Ext.apply[If]
, который просто объединяет экземпляр объекта в другой или Ext.override
который переопределяет (без подкласса) определение класса. Множество вариантов, в зависимости от того, что вам нужно.
Ответ 3
Вам нужно Ext.apply, если вы используете запросы Ajax для получения конфигураций с сервера. Поскольку ответы Ajax получены позже, после визуализации окна. Вторая часть вашего кода не будет работать.