22

我们正在使用 Ruby on Rails 框架(CRM 系统)开发一个相当大的应用程序,并且正在考虑重写它以使用 ExtJS,这样 Rails 就可以只处理数据,而 ExtJS 会以类似桌面的方式完成所有浏览器的繁重工作。

任何人都对什么是最好的方法有一些经验和提示?ExtJS 是否足够成熟,可以在相对较大(和复杂)的应用程序中使用?那么 Rails 部分呢?这里最好的方法是什么?

编辑:

只是为了说清楚。我宁愿以这样一种方式做到这一点,即一次加载所有 javascript 客户端应用程序代码(在应用程序启动时,最好作为一个压缩的 js 文件),然后只使用 ajax 向 Rails 发送数据和从 Rails 发送数据应用程序。此外,如果 ERB 可用于动态生成 Ext 应用程序元素,那就太好了。

4

10 回答 10

29

我目前有一个用 ExtJS 编写的非常大的桌面风格应用程序。它曾经运行在 Perl 的 Catalyst MVC 框架之上,但是一旦整个 View 层转换为基于 ExtJS 的桌面,我就开始迁移到 Ruby on Rails 模型和控制器。它同样快,即使不是更快,也更容易维护,并且代码库要小得多。

  • 确保您将活动记录配置设置为在 json 中不包含模型的根名称,以便 Ext 的 JsonStore 读取记录没有问题。ActiveRecord BASE 上有一个选项叫include_root_in_json你必须设置为 false。

  • 确保您在 Ext 中正确定义了您的应用程序类并最大化代码重用,并且您将需要某种方法来清理 DOM 中未使用的节点。除非您使用的是最新版本的 Safari 或 Firefox 3.1,否则 Javascript 性能可能会非常痛苦。

  • 您可能需要某种缓存方法,以便在页面加载时以 JSON 格式将服务器上的数据提供给您的应用程序。这将减少通过 Ajax 的往返次数。

  • 绝对使用 Ext 的 WindowManager 和 StoreManager 对象,或者从 Ext.util.MixedCollection 推出你自己的对象

  • 在单独的、可管理的文件中开发您的代码,然后有一个构建过程将它们组合成一个文件,然后在其上运行 YUI 的压缩器或 Dean Edwards Packer 来压缩/混淆文件。在它们自己的单个文件中提供所有 JS 和 CSS,包括 Ext 提供的文件。

于 2008-11-08T17:28:12.243 回答
14

[2012 更新] ExtJS 被Sencha 收购,后者提供 GPLv3 许可证和两个商业许可证。

[2008 年-10 月评论] ExtJS 在技术方面非常出色,但是几个月前许可的惨败让我开始关注其他框架——我现在根本不信任 ExtJS 的创建者。我不喜欢他们如何措辞他们的许可证,以及他们如何伪装成开源倡导者,同时显然试图不公平地从那些相信他们的人身上获利。

我只是出于道德原因反对使用 ExtJS。

于 2008-10-09T08:49:46.353 回答
5

这属于对米兰对我之前回答的评论的回答,但作为一个新来者,我没有足够的声誉点来回复:

“sp 未定义”存在问题,这是由于 Rails 将 JavaScript 文件缓存到一个大文件中(否则会有数百个文件)。缓存引入了一些带有换行符的奇怪错误,这些错误使整个事情都失败了。这让我费了好一阵子,但解决方案是将 Ruby 从 1.8.6(补丁级别 72)更新到最新的 1.8.7。这解决了问题,因此如果您想查看,请再次检查(您需要完全刷新才能击败资产缓存)。

我很高兴你以前遇到过 Ext MVC 的东西。目前我可以完全相信它一定很难理解,主要是由于缺乏示例、教程和演示。然而,代码本身的文档记录得相当好(至少无论如何更新的代码,有很多需要清除)。

我目前正在重构一些关键类,然后才准备好进行适当的“发布”。当一切准备就绪时(我想几个星期),我将生成文档并建立一个包含一些演示和示例代码的快速站点。完成后,我会在我的博客 ( http://edspencer.net ) 上发表一篇文章。

我的目标是尝试提供一个框架,使编写这种类型的应用程序变得更加简单,并建立一些约定。目前对于构建 ExtJS 应用程序没有达成共识或默认的方式,所以我们可以做的任何事情来推动这将是朝着正确方向迈出的一步!非常欢迎评论和贡献。

于 2008-10-18T12:57:56.320 回答
4

我已经成功部署了您描述的那种大型 RoR/ExtJS 应用程序(“单页”客户端 AJAX 驱动)。Ext_scaffold 几乎是一个红鲱鱼。

让 RoR 和 ExtJS 一起顺利工作并不太费力。根本的选择是是否将 ExtJS 扩展为“说 Rails”,修补 RoR 以“说 ExtJS”,或者在中间相遇。这将取决于您的团队的技能在哪里。

我采用了中间相遇策略,其中包括:

  • 扩展Ext.data.StoreExt.data.Record了解 Rails 路由约定
  • 破解Ext.grid.EditorPanelExt.form.BasicForm与 ActiveRecord 关联打好
  • 编写一些模块来扩展ActiveRecord::Base和简单地从和ApplicationController提交Ext.grid.EditorPanelExt.form.BasicForm

差不多就是这样。

话虽如此,ExtJS 也有缺点。

  • 你将不得不在内部弄脏你的手。不要被演示所迷惑。
  • 社区文档很差并且以 PHP 为中心。
  • 来自以 Github/Lighthouse 为中心的 RoR 世界,使用 VBulletin 就像在 1998 年醒来。我的意思是,没有公开的 bugtracker,只是一个更新的论坛帖子(WTF?)。
  • 代码有点过度设计。
  • 该团队失去了开源的可信度,因此他们失去了开源的氧气。
  • 该团队似乎专注于与 GWT 的集成(谁能说“enterpri$ey”?)。
于 2008-10-12T13:26:07.263 回答
4

您可能想看看 Netzke 框架,它被认为是这样做的:促进创建复杂的单页 Web 应用程序,并强调模块化方法。

Netzke 的优势在于:

  • 代码的可重用性和可扩展性。一旦你制作了你的组件(客户端和服务器端),你可以在任何地方重用它,与其他组件结合,或者通过继承来扩展它。

  • 效率。每个组件的类只从服务器加载(并评估)一次,这节省了服务器-客户端通信的大量时间。

  • 它是开源的,并且正在积极开发中。它有现场演示和示例代码。

  • 它具有预构建的组件,您可以直接使用,甚至无需接触 Ext JS(只需在 Rails 中配置它们)

  • 它已(由其作者)用于复杂物流应用程序的实际开发。

Netzke的缺点是:

  • 代码还很年轻,社区很小。

如果您有兴趣,请在此处查看描述和设计详细信息:https ://github.com/nomadcoder/netzke-core

现场演示/教程可以在这里找到:http: //netzke-demo.herokuapp.com和这里:http: //yanit.heroku.com

于 2009-05-07T21:24:02.223 回答
1

Ext 绝对足够成熟来处理这种情况。我目前正在开发一个带有很多 Ext 的 Rails 项目,最难的部分肯定是使用 Railsto_json来渲染 Ext 可以读取的 JSON(对于数组、哈希、模型,验证失败等)

查看scaffoldRails 的 ext_ 插件。我从这个开始并破解了它的ActiveRecord/ActionView扩展,直到它完成了我需要它做的事情。

于 2008-10-08T12:58:35.257 回答
1

我也有一些使用 ExtJS 和 Rails 的经验。使用该框架是免费获得一些漂亮小部件的好方法。如果您使用它来开发单页应用程序,REST 约定也应该与框架很好地配合。也适用于 RJS。

这是我对使用框架的抱怨

  1. 您不能真正使用 flash[:notice],因为重新加载单页应用程序很愚蠢。这使得传递验证通知和消息成为一件苦差事,因为您必须使用 RJS/javascript 方法来显示它们。

  2. 你不能太多地使用erb,因此你必须将很多逻辑封装到json回调中。

于 2008-10-09T08:21:30.887 回答
1

我已经为许多应用程序部署了 ExtJS 和 Rails,它们当然可以相互通信。我们在http://demo.domine.co.uk/admin上汇总了我们目前在 Rails + Ext 中开发的应用程序的快速演示。暂时忽略前端,因为它不完整 - 管理部分基本上已经完成,您可以使用以下命令登录:

用户名:edward 密码:rarrar

由于演示还没有完全完成,我不能保证它在这个阶段除了 Firefox 之外的任何东西都能正常工作。它没有理由不在其他浏览器中工作,我只是还没有花时间测试它们。重点更多是关于与 Rails 的集成。

开始菜单上的每个应用程序都通过 JSON 与 Rails 后端交互。我已经编写了一个基本的 Rails 插件来为我们完成大部分工作。我将很快发布其背后的代码,但现在希望这能让您了解这两种技术如何协同工作......

于 2008-10-17T13:52:39.500 回答
0

虽然我没有使用 ExtJS 的经验(除了阅读“ Practical Rails Projects ”一书中的内容),但我使用带有jrails的 jQuery Flexigrid来获得更多的桌面感觉。

那工作得很好。

于 2008-10-14T08:55:23.860 回答
0

行。我在很多项目中使用 extjs gxt gwt,开发起来非常容易。但我想告诉你,我用 extjs+gwt (gxt) 构建了我的项目,我不确定 Ruby。 链接文本

于 2009-02-08T05:40:43.833 回答