有经验的人有什么建议和最佳做法?ExtJS足够成熟以用于相对较大(且复杂)的应用程序吗?Rails部分怎么处理最好?
编辑:为了明确。我希望以这样的方式进行操作,即一次性加载所有javascript客户端应用程序代码(在应用程序启动时,最好作为一个压缩的js文件),然后只使用ajax发送数据到和从Rails应用程序。同时,也希望能够使用ERB来动态生成Ext应用程序元素。
我目前有一个非常大的桌面式应用程序,使用ExtJS编写。它曾经运行在Perl的Catalyst MVC框架之上,但是一旦整个View层被转换为基于ExtJS的桌面,我开始将模型和控制器迁移到Ruby on Rails。它同样快速,甚至更快,并且易于维护,代码库也更小。
确保将你的active record配置设置为不在json中包含模型的根名称,这样Ext的JsonStore就可以无问题地读取记录了。ActiveRecord BASE上有一个选项叫做include_root_in_json
,需要将其设置为false。
确保正确定义你的Ext Application类,最大程度地利用代码重复,你还需要某种方法来清理未使用的节点在DOM。如果不使用最新版本的Safari或Firefox 3.1,JavaScript性能可能会成为一个真正的问题。
你可能需要一些缓存数据的服务器端缓存方法,在页面加载时以JSON格式提供给你的应用程序。这将减少通过Ajax进行的往返次数。
一定要充分利用Ext的WindowManager和StoreManager对象,或者从Ext.util.MixedCollection中创建自己的对象。
将你的代码开发为单独的可管理文件,然后有一个构建过程将它们合并为单个文件,然后运行YUI的压缩器或Dean Edwards Packer对其进行压缩/混淆。所有JS和CSS都以自己的单个文件提供,包括Ext提供的文件。
这是对我之前回答米兰评论的回复,但由于我在这里是新手,没有足够的声望点来回复:
"sp未定义"存在问题,这是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也有缺点。
Ext已经足够成熟来处理这种情况。我目前正在开发一个使用大量Ext的Rails项目,最困难的部分肯定是使用Rails的to_json
来呈现Ext可以读取的JSON(用于数组、哈希、未通过验证的模型等)。
查看Rails的ext_scaffold
插件。我从这里开始,并对其ActiveRecord
/ActionView
扩展进行了修改,直到它能够满足我的需求。
我也有使用ExtJS和Rails的经验。使用这个框架是一个很好的方式,可以免费获得一些漂亮的小部件。如果你用它来开发单页应用程序,REST约定也应该很适合这个框架。同时也可以很好地与RJS配合使用。
以下是我对使用这个框架的抱怨:
由于重新加载单页应用程序是愚蠢的,所以你不能真正利用flash[:notice]。这使得传递验证通知和消息变得繁琐,因为你必须使用RJS/ javascript方法来显示它们。
你不能太多地使用erb,因此你必须将许多逻辑封装到json回调中。
用户名:edward 密码:rarrar
由于演示尚未完全完成,因此我不能保证它在除Firefox以外的任何其他浏览器中都能正常工作。它在其他浏览器中不起作用没有任何理由,只是我还没有花时间测试它们。重点是关于与Rails的集成。
开始菜单上的每个应用程序都通过JSON与Rails后端进行交互。我编写了一个基本的Rails插件来为我们完成大部分工作。我很快就会发布该代码,但现在希望这能给出这两种技术如何很好地协同工作的一些想法...
虽然我没有使用过ExtJS(除了在“Practical Rails Projects”书中读到的),但我使用了jQuery Flexigrid和jrails来获得更多桌面化的感觉。
这个方法效果还不错。