什么是ExtJS的理念?单页应用程序?

42

我需要使用ExtJs来编写我的下一个项目。 它是一个不错的Javascript库,但我不完全理解它的思想。 以文档页面为例。

我应该像那样使用extjs来编写我的Web应用程序吗? 只有一个页面永远不应该被刷新, 所有操作都是通过AJAX完成的?

如果要到达正确的位置可能需要很多“点击”和与之交互的工作,那么如何调试这样的应用程序呢? 你不能修复错误并刷新浏览器以查看结果。

有什么建议吗?

9个回答

44
我应该用ExtJS这样的方式编写我的Web应用程序吗?一个页面永远不应该被刷新,所有事情都通过AJAX完成吗?
您不必像ExtJS文档中那样编写应用程序。如果您查看ExtJS的示例页面,您会发现很多HTML与Ext小部件混合在单个页面上。在我的工作中,我有两个正在使用ExtJS的不同应用程序,一个是旧网站,我在其中使用小部件来优化页面,另一个是完全依靠ExtJS实现前端的完整Web应用程序。一旦我掌握了它,我绝对更喜欢后者,但学习曲线非常陡峭。
如何调试这样的应用程序,如果要到达正确的位置可能需要很多“点击”和操作?
关键在于模块化您的应用程序。单独构建每个组件并在真空中测试它。不要被困惑认为这必须是包含整个应用程序的巨大JavaScript文件。在大多数Web应用程序中,源代码有数十个或更多JavaScript文件,仅用于部署目的。
对于测试和调试,必须拥有Firebug。它允许您检查Ajax请求,实时调试JavaScript等等。
下面是一系列关于使用ExtJS组成大型应用程序的文章,它是一个相当不错的阅读材料,包含了许多有用的信息。
在ExtJS 4中构建示例应用程序 Part1 Part2 Part3 对于ExtJS 3.3及以下版本

我认为在任何情况下都可以使用ExtJS,如果你刚开始接触它,可能更有意义的是用你最熟悉的方法,并逐步添加一些ExtJS“调料”。但是,一旦你开始使用它创建单页应用程序,并且后端只输出JSON,你可能永远不会再回头使用旧方式来制作Web应用程序。

第1部分第2部分第3部分


+50 分钟的 ExtJS 链接! - Dustin Getz
2
请不要使用Firebug来调试基于Ext构建的应用程序(无意冒犯 :))。它会使应用程序变得非常缓慢。Google Chrome和Safari的开发工具(这些工具是从Webkit的本地工具增强而来)提供了更好的调试控制。 - Om Shankar

19
你可以像现代基于AJAX的应用程序一样,使用URL哈希来深度链接你的应用程序
Gmail是一个很好的例子,它是如何工作的。要进入我的收件箱,我导航到:

https://mail.google.com/mail/?shva=1#inbox

要进入我的联系人管理器,我浏览到:

https://mail.google.com/mail/?shva=1#contacts

这两个“页面”实际上在同一页上,使用应用程序时导航不会真正将我重定向到另一个页面。哈希是唯一发生变化的部分。
页面加载时,您需要检查window.location.hash并使用它来更新应用程序的状态。

是的。但这仍然意味着它是一个单页应用程序。不过,这确实给您设置页面初始状态的可能性。 - Robert Koritnik
这是一个单页面,但使用URL中的哈希可以使事情更加模块化。显然,将现有应用程序改为遵循这种哲学可能很困难,但如果您从头开始,可以使用页面哈希来模块化加载内容。您还可以在应用程序中慷慨地使用IFRAME标签,以允许您为不同的内容使用单独的页面,并将它们作为单个页面的内部部分。 - Dan Herbert
Gmail、Twitter、Flickr、Yahoo mail等所有伟大的单页面应用程序网站都大量使用IFRAME,供您参考。 - Om Shankar

6

不是单页应用,而是少量页面的应用

我参与了一个复杂的项目,它是基于以下技术构建的:

  • Asp.net 3.5
  • WCF Web服务
  • ExtJS 2.1
  • .netTiers(使用CodeSmith)用于DAL + DAO
  • SQL 2005 + OLAP Cubes(由于我们使用了一些第三方控件,部分支持UpdatePanels,因此必须在应用程序中进行一些令人头疼的解决方法,这个问题破坏了我们应用程序的基本处理)
  • 自定义外观和感觉在现有的ExtJS上 - 这是ExtJS成本化的最难部分,因此建议您坚持使用提供的主题之一

我们没有做实际的单页应用程序,但确实减少了页面数。应用程序中的每个工作区通常都是一个单独的页面。所有界面处理要么在客户端使用ExtJS完成,要么在WCF服务内的服务器端完成,该服务向ExtJS客户端界面提供数据。

它运行得非常好。

今天我可能会改变一件事情:我会从Asp.net + WCF迁移到Asp.net MVC。它更适合这种情况。

关于调试,我们广泛使用了Firebug(Firefox插件),就像其他开发人员一样。

但是使用ExtJS库非常成功。它使得轻松创建类似桌面的数据密集型Web应用程序成为可能。对于任何专业的Intranet Web应用程序开发,它都是一个很好的统一库。使用jQuery及其插件时,您总是会遇到社区提供的不同插件的问题。在这方面,ExtJS非常统一,并提供了非常漂亮的外观和感觉。


3

我认为这就是想法:在Web环境中以某种方式匹配桌面应用程序的感觉,这意味着几乎所有功能都使用Ajax。

至于调试,firebug是你的好朋友。但是调试桌面应用程序与其类似,在其中也可能需要大量点击才能找到错误。


2

您可以使用onHashChange监听器,以及我所谓的“闭包”格式来加载extjs屏幕。我写了一篇关于如何构建单页extjs应用程序的文章。


1

关于测试ExtJs...

这里有一个测试工具,可以测试ExtJs组件(此工具使用ExtJs制作!)

Siesta测试工具来测试ExtJs

我个人还没有使用过它,但我看了演示视频,感觉非常不错!

也许社区成员知道其他专门测试ExtJs的替代工具?

附注:我与Sencha(ExtJs)或Bryntum(Siesta)没有任何联系。我在客户层面上使用ExtJs。


你需要获得50个声望点才能在别人的答案下发表评论。这很容易实现,只需发布几个好的回答即可。 - ChrisF

0

你不必这样写。有时候这样看起来很好,而且更快(没有刷新新页面)。

你可以使用一些自动化测试工具或自己编写javascript的自动记录程序来完成你的任务。通常调试整个页面并不是一个好主意。如果它被模块化构建,那么就更容易了。隔离问题会更容易。

此外,考虑使用firebug进行调试,它可能会帮助你解决问题。

建议:这取决于你在做什么。如果你正在制作高度交互式页面,那么以这种方式做可能是一个好主意。它更快,ajax请求可以降低服务器负载。另一方面,这样做需要更多的时间。


0

我正在使用ASP.Net MVC和ExtJS。虽然它不是单页应用程序,但它很接近,感觉像一个单页应用程序。

此外,我们还有一个Web Forms应用程序,有数百个页面,我们在这个应用程序上应用了一些ExtJS UI小部件,使用了大量IFrame,它仍然运行良好并且看起来很棒。但我不喜欢使用Web Forms模型,并尽可能避免使用它。

在我看来:

  1. asp.net mvc平台比webforms平台更好。
  2. 控制器非常适合处理操作。
  3. 局部视图对于生成HTML内容非常有用(脚手架在这里非常有帮助)。

ExtJS

  • 用于导航,
  • 列表,
  • 搜索,
  • 编辑内容,
  • 通知,
  • 几乎可以用于任何其他功能...

总的来说,ExtJS是一个很棒的框架。


0
在我们的应用程序中,我们编写了一个自定义Page类来处理“页面”之间的切换。一个Page只包含一个ExtJS容器,返回您的类,并且我们通过在URL末尾设置#hash值来保留历史记录。
使用这种方法,您只需一次加载您的ExtJS库和所有资源,这对于性能以及保持应用程序流畅性都产生了巨大的回报。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接