Вопрос

Мы разрабатываем довольно большое приложение с использованием платформы Ruby on Rails (система CRM) и рассматриваем возможность переписать его для использования ExtJS, чтобы Rails просто выполнял обработку данных, а ExtJS выполнял всю тяжелую работу браузера, как на рабочем столе.

У кого-нибудь есть опыт и подсказки о том, какой подход будет лучшим?Является ли ExtJS достаточно зрелым, чтобы его можно было использовать в относительно больших (и сложных) приложениях?А как насчет части Rails — какой подход здесь будет лучшим?

РЕДАКТИРОВАТЬ:

Просто чтобы прояснить ситуацию.Я бы предпочел сделать это таким образом, чтобы весь код клиентского приложения Javascript загружался сразу (при запуске приложения, оптимально в виде одного сжатого js-файла), а затем просто использовал ajax для отправки данных в Rails и обратно. приложение.Кроме того, было бы неплохо иметь ERB для динамической генерации элементов приложения Ext.

Это было полезно?

Решение

В настоящее время у меня есть очень большое приложение в стиле настольного компьютера, написанное на ExtJS.Раньше он работал поверх платформы Perl Catalyst MVC, но как только весь уровень представления был преобразован в рабочий стол на основе ExtJS, я начал мигрировать на модели и контроллеры Ruby on Rails.Он столь же быстр, если не быстрее, его проще в обслуживании и он имеет гораздо меньшую кодовую базу.

  • Убедитесь, что вы установили конфигурацию активной записи так, чтобы не включать корневое имя модели в json, чтобы у JsonStore Ext не было проблем с чтением записей.В ActiveRecord BASE есть опция под названием include_root_in_json вам нужно установить значение false.

  • Убедитесь, что вы правильно определили классы приложения в Ext и максимально увеличили повторное использование кода, и вам понадобится какой-то метод для очистки неиспользуемых узлов в DOM.Производительность Javascript может быть настоящей проблемой, если вы не используете последние версии Safari или Firefox 3.1.

  • Вероятно, вам понадобится какой-то метод кэширования данных на сервере, который будет передаваться вашему приложению в формате JSON во время загрузки страницы.Это сократит количество рейсов туда и обратно через «Аякс».

  • Обязательно используйте объекты Ext WindowManager и StoreManager или создайте свои собственные из Ext.util.MixedCollection.

  • Разрабатывайте свой код в отдельных управляемых файлах, затем используйте процесс сборки, который объединяет их в один файл, а затем запустите на нем компрессор YUI или Dean Edwards Packer, чтобы сжать/запутать файл.Предоставляйте все JS и CSS в отдельных файлах, включая файлы, поставляемые Ext.

Другие советы

[обновление 2012 года] ExtJS была приобретена Sencha, предлагающий лицензию GPLv3., и две коммерческие лицензии.

[2008-октябрь комментарий] ExtJS великолепен с технической точки зрения, но фиаско с лицензированием несколько месяцев назад заставило меня взглянуть на другие фреймворки - сейчас я совсем не доверяю создателям ExtJS.Мне не нравится, как они сформулировали свою лицензию и как они притворялись сторонниками открытого исходного кода, очевидно пытаясь несправедливо нажиться на тех, кто им поверил.

Я против использования ExtJS только по моральным соображениям.

Это ответ на комментарий Милана к моему предыдущему ответу, но, как новичку, у меня недостаточно очков репутации, чтобы ответить там:

Возникла проблема с «sp is undefine», которая была результатом кэширования Rails файлов JavaScript в один большой файл (в противном случае файлов было бы несколько сотен).Кэширование привело к некоторым странным ошибкам с символами новой строки, которые все испортили.Это заставило меня на некоторое время рвать на себе волосы, но решением было обновить Ruby с 1.8.6 (уровень исправления 72) до последней версии 1.8.7.Это устранило проблему, поэтому проверьте ее еще раз, если хотите посмотреть (вам нужно будет выполнить полное обновление, чтобы обойти кэширование ресурсов).

Я рад, что вы раньше сталкивались с Ext MVC.В настоящее время я вполне могу поверить, что это довольно сложно понять, главным образом из-за отсутствия примеров, учебных пособий и демонстраций.Однако сам код достаточно хорошо документирован (по крайней мере, новый код, там многое нужно прояснить).

В настоящее время я занимаюсь рефакторингом нескольких ключевых классов, прежде чем они будут готовы к надлежащему «выпуску».Когда все будет готово (думаю, через пару недель), я сгенерирую документацию и создам быстрый сайт с демонстрациями и примерами кода.Когда я это сделаю, я опубликую сообщение в своем блоге (http://edspencer.net).

Моя цель — попытаться предоставить структуру, которая значительно упростит написание приложений такого типа, а также установить некоторые соглашения.В настоящее время не существует единого или стандартного способа структурирования приложений ExtJS, поэтому все, что мы можем сделать для продвижения вперед, будет шагом в правильном направлении!Комментарии и вклады более чем приветствуются.

Я успешно развернул большое приложение RoR/ExtJS того типа, который вы описываете («одностраничное» клиентское приложение, управляемое AJAX).Ext_scaffold — это в значительной степени отвлекающий маневр.

Обеспечить совместную работу RoR и ExtJS не так уж и сложно.Фундаментальный выбор заключается в том, расширить ли ExtJS, чтобы «говорить о Rails», исправить RoR, чтобы «говорить на ExtJS», или найти компромиссное решение.Это будет зависеть от навыков вашей команды.

Я принял стратегию «встречи посередине», которая включает в себя:

  • Продлевать Ext.data.Store и Ext.data.Record знать соглашения о маршрутизации Rails
  • Взломать Ext.grid.EditorPanel и Ext.form.BasicForm хорошо работать с ассоциациями ActiveRecord
  • Напишите несколько модулей для расширения ActiveRecord::Base и ApplicationController просто совершить из Ext.grid.EditorPanel и Ext.form.BasicForm

Вот и все.

Однако у ExtJS есть и недостатки.

  • Вам придется испачкать руки во внутренностях.Не обманывайтесь демо-версиями.
  • Документация сообщества плохая и ориентирована на PHP.
  • Выходец из мира RoR, ориентированного на Github/Lighthouse, использовать VBulletin — это как проснуться в 1998 году.Я имею в виду, что нет общедоступного средства отслеживания ошибок, просто обновляется сообщение на форуме (WTF?).
  • Код немного переработан.
  • Команда потеряла доверие к открытому исходному коду, поэтому они потеряли кислород открытого исходного кода.
  • Команда, судя по всему, занимается интеграцией с GWT (может ли кто-нибудь сказать «предприятие»?).

Возможно, вам захочется взглянуть на структуру Netzke, которая, как предполагается, делает именно это:облегчить создание сложного одностраничного веб-приложения с упором на модульный подход.

Преимущества Netzke:

  • Возможность повторного использования и расширяемость кода.Как только вы создадите свой компонент (как клиентский, так и серверный), вы сможете повторно использовать его в любом месте, комбинировать с другими компонентами или расширять его с помощью наследования.

  • Эффективность.Класс для каждого компонента загружается с сервера (и оценивается) только один раз, что экономит много времени на взаимодействии сервер-клиент.

  • Это открытый исходный код, и он находится в активной разработке.Он имеет живые демо-версии и примеры кода.

  • Он имеет готовые компоненты, которые вы можете использовать сразу, даже не прикасаясь к Ext JS (просто настройте их в Rails).

  • Он использовался (автором) для реальной разработки сложного логистического приложения.

Недостатками Нетцке являются:

  • Код еще молод, а сообщество невелико.

Если вам интересно, посмотрите описание и детали конструкции здесь: https://github.com/nomadcoder/netzke-core

Живую демонстрацию/руководства можно найти здесь: http://netzke-demo.herokuapp.com и здесь: http://yanit.heroku.com

Ext определенно достаточно зрел, чтобы справиться с этой ситуацией.В настоящее время я работаю над проектом Rails с большим количеством Ext, и самой сложной частью определенно была работа с Rails. to_json для рендеринга JSON, который может читать Ext (для массивов, хэшей, моделей, не прошедших проверку и т. д.)

Посмотрите ext_scaffold плагин для Rails.Я начал с этого и урезал его ActiveRecord/ActionView расширения, пока он не сделал то, что мне было нужно.

У меня также есть некоторый опыт использования ExtJS с Rails.Использование фреймворка — отличный способ бесплатно получить красивые виджеты.Соглашение REST также должно хорошо сочетаться с инфраструктурой, если вы используете его для разработки одностраничных приложений.Хорошо работает и с RJS.

Вот мои претензии к использованию фреймворка

  1. Вы не можете использовать flash[:notice], поскольку перезагрузка одностраничного приложения — это глупо.Это усложняет передачу уведомлений и сообщений о проверке, поскольку для их отображения приходится использовать методы RJS/javascript.

  2. Вы не можете часто использовать erb, поэтому вам придется инкапсулировать большую часть логики в обратные вызовы json.

Я использовал ExtJS и Rails для ряда приложений, и их, безусловно, можно заставить взаимодействовать друг с другом.Мы собрали краткую демонстрацию приложения, которое сейчас разрабатываем в Rails + Ext, на странице http://demo.domine.co.uk/admin.Пока игнорируйте интерфейс, поскольку он не завершен — раздел администрирования по существу завершен, и вы можете войти в него с помощью:

имя пользователя:Эдвард Пароль:ра-рар

Поскольку демо-версия еще не полностью завершена, я не гарантирую, что на данном этапе она работает корректно в чем-либо, кроме Firefox.Нет никаких причин, по которым он не будет работать в других браузерах, я просто еще не потратил время на их тестирование.Однако речь больше идет об интеграции с рельсами.

Каждое приложение в меню «Пуск» взаимодействует с серверной частью Rails через JSON.Я написал базовый плагин для Rails, который сделает за нас большую часть работы.Вскоре я опубликую код, лежащий в основе этого, но сейчас, надеюсь, это даст некоторое представление о том, насколько хорошо эти две технологии могут работать вместе...

Хотя у меня нет опыта работы с ExtJS (кроме того, что я читал об этом в разделе "Практические проекты Rails"книга) Я использовал jQuery Флексигрид с рельсы чтобы получить больше ощущения от рабочего стола.

Это сработало очень хорошо.

Хорошо.Я использую extjs gxt gwt во многих проектах, и его очень легко разрабатывать.Но я хочу вам сказать, что я построил свой проект с помощью extjs+gwt (gxt), насчет Ruby я не уверен.текст ссылки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top