Опасности использования ExtJS в большом проекте с RoR?
Мы разрабатываем значительно большее приложение с использованием Ruby on Rails (CRM-системы) и планируем переписать его для использования ExtJS, чтобы Rails просто выполнял обработку данных, в то время как ExtJS выполнял всю работу с браузером на рабочем столе, подобный способ.
У кого-нибудь есть опыт и подсказки о том, какой был бы лучший подход? Является ли ExtJS достаточно зрелым для использования в относительно больших (и сложных) приложениях? А как насчет части Rails - какой будет лучший подход здесь?
EDIT:
Просто, чтобы было ясно. Я бы предпочел сделать это таким образом, чтобы сразу загрузился весь код приложения на стороне клиента javascript (при запуске приложения, оптимально как один сжатый файл js), а затем просто используйте ajax для отправки данных в Rails и из Rails приложение. Кроме того, было бы неплохо иметь ERB для динамической генерации элементов Ext apliccation.
Ответы
Ответ 1
В настоящее время у меня очень большое приложение для рабочего стола, написанное в ExtJS. Он использовался для работы поверх структуры MVC Perl Catalyst, но как только весь слой "Вид" был преобразован в рабочий стол на основе ExtJS, я начал мигрировать на модели и контроллеры Ruby on Rails. Он одинаково быстро, если не быстрее, и проще в обслуживании и имеет гораздо меньшую базу кода.
-
Убедитесь, что вы настроили конфигурацию активной записи, чтобы не включать корневое имя модели в json, так что Ext JsonStore не имеет проблем с чтением записей. В ActiveRecord BASE есть опция, которая называется include_root_in_json
, вам нужно установить значение false.
-
Убедитесь, что вы правильно определили свои классы приложений в Ext и максимизировали повторное использование кода, и вам понадобится какой-то метод для очистки неиспользуемых узлов в DOM. Производительность Javascript может стать настоящей болью, если вы не используете последние версии Safari или Firefox 3.1.
-
Вероятно, вам понадобится какой-то метод кэширования данных на сервере для вашего приложения в формате JSON во время загрузки страницы. Это сократит количество круговых поездок через Ajax.
-
Определенно используйте объекты Ext WindowManager и StoreManager или откатывайте свои собственные из Ext.util.MixedCollection
-
Разработайте свой код в отдельных управляемых файлах, затем создайте процесс сборки, который объединит их в один файл, а затем запустит компрессор YUI или упаковщик Dean Edwards Packer для сжатия/обфускации файла. Служите все JS и CSS в своих отдельных файлах, включая поставляемые Ext.
Ответ 2
[обновление 2012 года] ExtJS был приобретен Sencha, который предлагает лицензию GPLv3 и две коммерческие лицензии.
[Комментарий за 2008 год] ExtJS отлично по техническим причинам, но фиаско с лицензированием несколько месяцев назад привело меня к рассмотрению других фреймворков - я не доверяю создателям ExtJS сейчас. Мне не нравится, как они заявили о своей лицензии, и как они притворялись защитниками с открытым исходным кодом, хотя, очевидно, пытались получить прибыль от тех, кто им верил.
Я только против использования ExtJS по моральным соображениям.
Ответ 3
Это относится к ответу Милана на мой предыдущий ответ, но, как новичок, у меня нет достаточного количества точек репутации, чтобы ответить там:
Возникла проблема с "sp is undefined", которая была результатом кэширования Rails файлов JavaScript в один большой файл (в противном случае было бы несколько сотен файлов). Кэширование ввело некоторые странные ошибки с новыми линиями, которые отбросили все это. Это застало меня вытащить мои волосы на некоторое время, но решение состояло в том, чтобы обновить Ruby с 1.8.6 (уровень исправления 72) до последнего 1.8.7. Это устранило проблему, поэтому, пожалуйста, проверьте ее снова, если вы хотите посмотреть (вам нужно сделать полное обновление, чтобы побить кэширование ресурсов).
Я рад, что раньше вы сталкивались с материалами Ext MVC. В настоящее время я могу полностью полагать, что это должно быть довольно сложно понять, главным образом из-за отсутствия примеров, учебников и демонстраций. Сам код достаточно хорошо документирован (по крайней мере, новый код в любом случае, есть много, что требует очистки).
В настоящее время я занимаюсь рефакторингом нескольких ключевых классов, прежде чем он будет готов к надлежащему выпуску. Когда это будет готово (я думаю, пару недель), я создам документацию и настрою быстрый сайт с некоторыми демонстрационными примерами и примером кода. Когда я это сделаю, я поставлю сообщение в своем блоге (http://edspencer.net).
Моя цель состоит в том, чтобы попытаться обеспечить структуру, которая упростит запись этого типа приложения и установит некоторые соглашения. В настоящее время нет консенсуса или стандартного способа структурирования приложений ExtJS, поэтому все, что мы можем сделать, чтобы двигаться дальше, будет шагом в правильном направлении! Комментарии и вклады более чем приветствуются.
Ответ 4
Я успешно развернул большое приложение RoR/ExtJS, которое вы описываете ( "одностраничный" клиентский AJAX-клиент). Ext_scaffold в значительной степени является красной селедкой.
Он не слишком облагается, чтобы заставить RoR и ExtJS работать плавно вместе. Основной выбор заключается в том, следует ли расширять ExtJS до "говорить Rails", патч RoR "говорить ExtJS" или встречаться посередине. Это будет зависеть от того, где ваши навыки команды.
Я принял стратегию "встреча в середине", которая включает в себя:
- Расширьте
Ext.data.Store
и Ext.data.Record
, чтобы знать о правилах маршрутизации Rails
- Hack
Ext.grid.EditorPanel
и Ext.form.BasicForm
, чтобы хорошо играть с ассоциациями ActiveRecord
- Напишите некоторые модули для расширения
ActiveRecord::Base
и ApplicationController
, чтобы просто комментировать из Ext.grid.EditorPanel
и Ext.form.BasicForm
Это в значительной степени.
Сказав это, в ExtJS есть недостатки.
- Тебе придется замарать руки во внутренностях. Не поддавайтесь демкам.
- Документация сообщества плохая и ориентированная на PHP.
- Исходя из мира RoR, основанного на Github/Lighthouse, использование VBulletin похоже на просыпание в 1998 году. Я имею в виду, что нет публичного багтрекера только что обновленного форума (WTF?).
- Код немного перепроектирован.
- Команда потеряла доверие к Open Source, поэтому они потеряли кислород с открытым исходным кодом.
- Команда, похоже, ориентирована на интеграцию с GWT (может ли кто-нибудь сказать "enterprisei $ey"?).
Ответ 5
Возможно, вам захочется взглянуть на инфраструктуру Netzke, которая, как считается, сделает именно это: упростить создание сложного одностраничного веб-приложения с акцентом на модульный подход.
Преимущества Netzke заключаются в следующем:
-
Повторяемость и расширяемость кода. Как только вы получите свой компонент (как на стороне клиента, так и на стороне сервера), вы можете его повторно использовать в любом месте, объединить с другими компонентами или событие расширить его с наследованием.
- Эффективность
. Класс для каждого компонента загружается с сервера (и оценивается) только один раз, что экономит много времени на связи между сервером и клиентом.
-
Это с открытым исходным кодом, и он находится в активной разработке. В нем есть демо-версии и пример кода.
-
У него есть готовые компоненты, которые вы можете использовать сразу, даже не касаясь Ext JS (просто настройте их в Rails)
-
Он использовался (по его автору) для реальной разработки сложного логистического приложения.
Недостатками Netzke являются:
- Код еще молод, а сообщество мало.
Если вам интересно, ознакомьтесь с описанием и деталями проекта здесь: https://github.com/nomadcoder/netzke-core
Живая демонстрация/учебники можно найти здесь: http://netzke-demo.herokuapp.com и здесь: http://yanit.heroku.com
Ответ 6
Ext определенно достаточно зрел, чтобы справиться с этой ситуацией. В настоящее время я работаю над проектом Rails с большим количеством Ext, и самая сложная часть определенно работает с Rails to_json
для рендеринга JSON, который Ext может читать (для массивов, хэшей, моделей, которые не прошли проверку и т.д.),
Проверьте плагин ext_ scaffold
для Rails. Я начал с этого и взломал его расширения ActiveRecord
/ActionView
, пока не сделал то, что мне было нужно.
Ответ 7
У меня есть опыт использования ExtJS с Rails. Использование фреймворка - отличный способ получить бесплатные симпатичные виджеты. Соглашение REST должно хорошо сочетаться с каркасом, если вы используете его для разработки приложений с одной страницей. Хорошо работает с RJS.
Вот мои проблемы с использованием фреймворка
-
Вы не можете использовать flash [: notice], так как перезагрузка приложения с одной страницей глупо. Это делает отправку уведомлений о проверке и сообщений сложной задачей, так как для их просмотра нужно использовать методы RJS/javascript.
-
Вы не можете использовать erb много, поэтому вам нужно инкапсулировать большую часть логики в обратные вызовы json.
Ответ 8
Я развернул ExtJS и Rails для ряда приложений, и их можно заставить поговорить друг с другом. Мы собрали краткую демонстрацию приложения, которое мы сейчас разрабатываем в Rails + Ext, в http://demo.domine.co.uk/admin. Игнорируйте переднюю часть на данный момент, поскольку она не завершена - раздел администрирования по существу закончен, и вы можете войти в него с помощью:
имя пользователя: edward
пароль: rarrar
Поскольку демонстрация еще не полностью закончена, я не буду гарантировать, что она работает правильно в чем-либо кроме Firefox на данном этапе. Там нет оснований для того, чтобы он не работал в других браузерах, я еще не проводил их тестирование. Однако речь идет скорее об интеграции с рельсами.
Каждое приложение в меню запуска взаимодействует с бэкэндом Rails через JSON. Я написал основной плагин Rails, чтобы выполнить большую часть работы для нас. Я скоро выпущу этот код, но теперь, надеюсь, это дает некоторое представление о том, насколько хорошо эти две технологии могут работать вместе...
Ответ 9
Хотя у меня нет опыта работы с ExtJS (кроме того, что я читал в Практические проекты Rails), я использовал jQuery Flexigrid с jrails, чтобы получить больше ощущения от рабочего стола.
Это сработало очень хорошо.
Ответ 10
Ok. Я использую extjs gxt gwt для многих проектов, и это очень просто для разработки. Но я хочу сказать вам, что я построил свой проект с помощью extjs + gwt (gxt), я не уверен в Ruby.
текст ссылки