Подтвердить что ты не робот

Опасности использования ExtJS в большом проекте с RoR?

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

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

EDIT:

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

4b9b3361

Ответ 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. текст ссылки