Как стать автором
Обновить

Комментарии 50

Забыли ещё одно правило: 10 раз подумать прежде, чем вообще связываться с ExtJS.
Альтернативы?
dojo?
Писал как-то на dojo простенькую формочку с автозаполнением чекбоксов. В доджо я больше ни ногой.
qooxdoo?
И чем лучше?
Не лучше, а альтернатива; прежде всего, он бесплатен, в отличие от ExtJS.
у экста только саппорт платный
Ваши заказчики/вы сами готовы открывать код разрабатываемых приложений? Там ведь GPLv3.

Although the GPLv3 has many terms, the most important is that you must provide the source code of your application to your users so they can be free to modify your application for their own needs.

www.sencha.com/products/extjs/license/
Ну, так если вы зарабатываете деньги на этой библиотеке, почему не хотите за нее сами заплатить?
Использовать и подключать можно. Создавать расширения можно. Распространять можно.

По требованию нужно будет показать модифицированные исходники, если модифицирован исходник самого фреймворка.

Это для того, чтобы не плодились производные платные фреймворки и прочие нахлебники.

Единственный краеугольный момент — расширение классов фреймворка попадает под модификацию. А начиная с 4.0 у них все уроки и мануалы предлагают Ext.extend на каждом шагу.
А разве браузер не отдает код при загрузке страницы? Это же javascript, причем именно фронтенд, как я понимаю? Не думаю, что лицензия распространяется и на serverside-код приложения.
Исходный код должен прилагаться, если вы распространяете свое ПО. Не знаю, распространяется ли это на случай, если модифицировання библиотека используется на одном конкретном сайте.
По богатству виджетов и общей проработанности никто не может составить конкуренцию ExtJS.
Уже давно вижу на Хабре такие коментарии, но так и не понял почему не связываться? Мне сейчас достались ужасно написаные на эксте работы, но самим фреймворком я доволен. Собственно альтернативы для быстрого создания сложных CRM и ERP вебсистем я не вижу. Минусы есть — баги в библиотеке. Но исходники отлично задокументированы и если чтото не нравится можно просто написать свой кусок.
Основная на мой взгляд пробелма с ExtJS состоит в его идеологии, а именно в попытке дать инструмент создания полноценных десктопных приложений, но в броузере. Нам дают мощный инструмент, используя который по определённым правилам мы можем быстро и легко программировать сложные интерфейсы(даже в специальных полувизуальных редакторах) и логику к ним. Вот только вся соль в 'определённых правилах'.
Рано или поздно ваши потребности начинают превышать возможности фреймворка и тогда приходит Беда. С большой буквы. Чтобы сделать что-то, не предусмотренное фреймворком, нужны либо костыли, либо громоздкие настройки над существующими компонентами, причём на создание их времени в любом случае уйдёт в разы больше, чем если бы вы вообще не использовали Ext.
Затем кастомизация. Хотите подружить Ext с вашим красивым сайтом? Пожалуйста, вот вам дефолтная синяя тема, вот вам серая тема, и вот ещё несколько каких-то других. Хотите больше изменений, другую вёрстку, другие палитры или ещё чего-то — легко, делайте сами, но помните про Беду.
Далее, периодически выходят новые версии. Иногда они ничего не ломают, и обновление проходит глано, но чаще ломают, и чем больше у вас кода на Ext, тем больше придётся переделывать и допиливать при апгрейде.
Так же есть баги. Они есть в текущей версии. Просто в текущей, не важно какая там сейчас. Многие из багов заботливо изложены на форуме и превратились почти что в фичи, хоть некоторые из них могут и пофиксить быстро, но некоторые будут висеть(точнее не будут, а уже висят) годами. Придётся фиксить самим, но в исходники лезть — нини. Тронете — забудьте об обновлениях. Тогда следуем совету из данного топика, наш выбор — копипастить компоненты в кастомные со всеми потрохами. Которые с каким-нибудь релизом обязательно изменятся и всё опять поломается.
Про мдленную работу Ext и упоминать не буду — это извечная тема, о которой только ленивый не писал.

Впрочем, если вы не планируете обновляться и пишете только CRM, да ERP, с которыми никто, кроме ваших коллег или сотрудников заказчика, работать не будут, а так же если вы готовы инвестировать своё время в изучение технологий, которые для других вещей в вебе подходят не очень, то почему бы и нет — работать Ext будет и будет достаточно хорошо. Находясь в рамках заданных правил программировать на нём можно достаточно быстро.
С большей частью пунктов согласен. Не соглашусь с копипастой компонентов, расширение имеющихся делается вполне в стиле наследования ООП с классовым наследованием.
Собственно кроме применения во внутренних системах ext особо нигде и не нужен.
Не обязательно тянуть со всеми потрохами. Я случайно обнаружил следующую возможность Ext:
/**
 * Класс аналогичен классу Ext.data.proxy.Ajax
 * за исключением того, что все запросы этого класса
 * выполняются с помощью POST
 */
Ext.define('Ext.data.proxy.Ajax',
{
    extend: 'Ext.data.proxy.Ajax',
    alias:  'proxy.ajax',

    actionMethods:
    {
        create : 'POST',
        read   : 'POST',
        update : 'POST',
        destroy: 'POST'
    }
});
Таким образом на класс можно наложить требуемый патч. Очень помогает в борьбе с глюками ExtJS.
беда настанет только в том случае, если разработчик умеет писать только на extjs и не знает html/js/css. Такой разработчик сделает виджет состоящий из 10 панелей с супер сложным лайаутом, который любой современный браузер будет рендерить кучу времени. А всего-то нужно сделать обычный хтмл темплейт и реализовать на его основе виджет, но это гораздо сложнее, ведь так?
Вот мне нравятся такие БЕДА-лаги. Фреймворки — зло!!! Мы будем писать все сами!!! Зачем мне фремфорки, я знаю ЖС и сам все могу написать!!! Они такие ОГРАНИЧЕНЫЕ, у них «определенные правила»!!! А ЖС дает столько свободы!!! Они такие медленные!!! Мне на их обучение приходится тратить столько времени!!! А я и так пол жизни убил на изучение ЖС, мне еще за него деньги вернули ))

А потом когда возвращаются из ворлд оф варкрафта в реальный мир, оказывается, что у проектов бюджеты не ризиновые, и разработчики в команже пишут по разному, а не как ты.

И потом медленными и уверенными шажочками в вашем жсном детище появляются и «определенные правила» и проблема с кастомизацией и обновленгия и баги и все все все все… Вот только в отличии от злобных фремворков — остаетесь вы со своим борохлом один на один и нет никакого камьюнити, и нет гугла, в который можно вбить «большая проблема с моим борохлом». А обратись вы к комуто с вопросом — глянь друг, 3тью ночь не сплю, не могу найти проблему — Матерь божья, это что такое, это ты сам такое написал, ну ты крутой, ну ты мужик, ну ты кремень, ну ты молочага. Я не такой крут, так что давай-ка наверно сам %)

А еще прикольно размещать объявления о поиске работы «ищу жсника, который рубит в самописных фреймворках»

Уххх… как меня понесло… Прости, ты не виноват, просто уж очень часто я подобную песню слышал, решил подиграть…

Подитожим… Фремворки, популяризированые, пишут же не идиоты, в частности у екстжсников там за плечами не одно детище + комьюнити, которое поддерживает, разбирается, помогает разбираться.И хватит быть борцм за свободу, правила пишутся для достижения цели людьми эту цель уже достигшие, и почему бы к них не поучится :)

Всем спасибо…
Всё верно, я бы ещё добавил несколько пунктов:

1. Изучите, что за метод такой mon() и почему он иногда очень полезен.
2. Пишите скрипты сборки проекта, чтобы можно было собирать версии с разным набором внутренних модулей.
3. Тщательно изучайте код, найденный на форуме ExtJS, например, перед его добавлением в проект. Аналогично про расширения.
4. Тщательно изучайте лицензионные соглашения на расширения, если таковых нет, уточняйте у автора.
Господа, прошу прощения, что не в тему, но уже несколько часов пытаюсь подружить Eclipse с ext-4.0.7-gpl
Вот страничка на которой написано что и как делать. Здесь
Но там показано что нужен com.spket.js_1.6.18.jar
Если присмотреться, то текущая версия фреймворка копирует в папку с плагинами com.spket.js_1.6.20.jar
Что делать? Или подскажите рабочий вариант, не нужен мне этот spket только бы работало.
Спасибо.
Простите, но зачем вам эклипс?
Это моя рабочая среда, нравиться, поэтому стараюсь ничего другого не использовать, подскажите если не тяжело.
К сожалению, даже понятия не имею. Для разработки пользуюсь Notepad++/vim + Firebug + jslint.com, просто и надежно.
Notepad++/vim это конечно old school и всё такое, но мы ж в 21 веке как-никак.
А причем здесь 21-й век? :)
Кстати, натыкался как-то на интересную статистику, согласно которой увлечение IDE вместо средств командной строки кореллирует с общим падением уровня разработчиков. Жаль, ссылку ту не сохранил.
Я тоже в своё время сидел в эклипсе. Потом пересел на WebStorm от JetBrains. И это было как после газели прокатиться на астон мартине. Как по мне так ничего лучше для web-разработки на данный момент не существует.
Хех, но WebStorm платный, а еклипс и плагин нет.
Ну неужели никто не делал такое? Что-то не могу нарыть в гугле инфу, есть инструкции и так д, но почему то после проделанного всего не видит ExtJS и все.
Кхм… 35$ это как-то по-моему вообще смешно за действительно качественный продукт. К тому же что мне ещё очень нравится, так это оперативность, с которой они фиксят баги и реагируют на багреапорты.
Ну так мне учиться, а не работать.
EAP бесплатные
Все, сделал, нужно было установить по дефалту фреймворк и я конфигурировал не из того файла.
С еклипсом то разобрался, но на смену пришел другой глюк
Не могу подключить ExtJs к html, хотя делаю все так как на офф сайте.
Start_ExtJs
Подгружется чистый html, тоисть белая html-страничка соответственно.
Кто сталкивался? Что я пропустил?
Спасибо.
Странно как то — стандартная функция загрузилась,
Ext.application({
name: 'HelloExt',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [
{
title: 'Hello Ext',
html : 'Hello! Welcome to Ext JS.'
}
]
});
}
});


А беру любой другой пример кидаю код в js молчит, не грузит, может еще какие-то файлы нужно подключать кроме этих двух?
Не очень понял вот этот фрагмент (в чем была мысль автора)
Примечание переводчика.
Что бы добавить потомка как член класса, можно просто перенести его из конфига...


Вы заменили lazy rendering панели на ее явную инициализацию, но непонятно, зачем. Раз мы говорим об ExtJS 4, то есть метод down(), который решит проблему получения ссылки на вложенный объект. itemId, если не ошибаюсь, тоже в этой ситуации поможет.
К слову, в ExtJS 3 была замечательная штука под назывнием ref (жаль, что ее убрали).
А вообще в идеале такие ссылки должны создаваться на уровне контроллера (с помощью секции refs) и код view должен быть максимально прост и не содержать логики внутренней синхронизации.
И таки да, чтобы добавить что-то как член класса, следует воспользоваться секцией statics в объявлении класса.
В ExtJS 4 в контроллерах можно использовать refs, о чем сказано в документации
Знаю, в комменте это тоже указано
Мысль была в том, что такие ссылки более логичны и прозрачнее выглядят. down очень похож на get. Стоит поменять потомка так, что параметр при вызове down() будет не верен и придётся править код.
Имхо это не повод отказываться от конфигурационных объектов и ленивой инициализации. Если так хочется видеть явное присваивание — привяжитесь к afterrender компонента. Но честно говоря вообще странно, что такая логика требуется прямо во view.
Если использовать в параметре к down нормальный селектор, а не "#id", то не придется. В этом как раз и главное отличие down от get. Естественно, это не касается ситуаций, когда вы меняете Grid на Form, например, и ищете по xtype. Хотя можно оборачивать наследника в панель с определенным xtype.
«Указывайте xtype такой же как имя вашего класса, включая пространство имён»

К сожалению, с xtype разработчики ExtJS либо перемудрили, либо недодумали. Чтобы такой код работал:

items: [{
    xtype: 'button',
    text: 'Standard Button'
}, {
    xtype: 'App.widget.CustomButton',
    text: 'Custom button'
}]

класс должен быть объявлен так:

Ext.define('App.widget.CustomButton', {
    extend: 'Ext.Button',
    alias: 'widget.App.widget.CustomButton' // а не 'App.widget.CustomButton'
})

Вместо того, чтобы превратить xtype в имя класса и согласовать его с механизмом динамической загрузки классов, сохранив возможность lazy instantiation, ребята из Sencha решили превратить xtype в шорткаты, разбитые с помощью префиксов на тематические группы: widget., proxy., reader. и т.д. Очень неудачное решение.
плохая идея использовать в xtype точки т.к. отваливаются селекторы для компонентов (query, up, down). Мы для своего проекта написали специальный пропроцессор который автоматически генерирует xtype для всех виджетов.

Ext.Class.registerPreprocessor('default_xtype', function(cls, data) {
var className = data.$className,
re = new RegExp(/^project_name.view./),
xtype;
if (re.test(className) && !data.alias) {
xtype = className.replace(re, '').replace(/\./g, '_').toLowerCase();
data.xtype = cls.xtype = xtype;
data.xtypes = [ xtype ];
data.alias = [ 'widget.' + xtype ];
}
}, true);

Ext.Class.defaultPreprocessors.push('default_xtype');


(код расчитан на версию 4.0.7)
Прекрасное решение. Спасибо.
Один из плюсов ext, что можно делать такие вещи.
Спасибо за фичу!
Подскажите какую-нибудь литературу по ExtJS4, сайты, книги, форумы, с чего стоит начать изучение?
Про офф. документацию знаю, пользуюсь. Хочется чего-нибудь еще
Очень туго с книгами и сайтами. Обещают книгу в 2012… Единственный пока верный способ — смотреть исходные коды готовых проектов. Ну не забывать про форум ext и стак оверфлоу
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации