【问题标题】:What is ExtJS philosophy? Single page application? [closed]什么是 ExtJS 哲学?单页应用? [关闭]
【发布时间】:2009-10-19 14:35:47
【问题描述】:

我需要使用 ExtJs 编写我的下一个项目。 这是一个不错的 Javascript 库,但我并不完全理解它背后的想法。 以docs page 为例。

我应该像那样用 extjs 编写我的 Web 应用程序吗? 永远不应该刷新的一页, 以及一切都由 AJAX 完成?

如果找到正确的位置,您将如何调试此类应用程序 可能需要大量的“点击”并使用它。 您无法修复错误并在浏览器中点击刷新以查看 结果。

有什么建议吗?

【问题讨论】:

    标签: javascript ajax extjs


    【解决方案1】:

    我应该像那样用 ExtJS 编写我的 Web 应用程序吗?一个永远不应该刷新的页面,一切都由 AJAX 完成?

    您不必像 ExtJS 文档那样编写应用程序。如果您查看 ExtJS 的示例页面,您会看到许多 HTML 与各个页面上的 Ext 小部件混合在一起。在我的工作中,我有两个不同的应用程序正在使用 ExtJS,一个是一个遗留站点,我使用小部件来修饰页面,另一个是一个完整的 Web 应用程序,只使用 ExtJS 作为前端。一旦掌握了窍门,我肯定更喜欢后者,但学习曲线非常陡峭。

    如果到达正确的位置可能需要大量“点击”并使用它,您如何调试此类应用程序。

    这里的关键是模块化您的应用程序。单独构建每个组件并在真空中进行测试。不要以为这一定是一些巨大的 JavaScript 文件 包含整个应用程序。在大多数 Web 应用程序中,源代码包含数十个或更多 JavaScript 文件,这些文件仅用于部署目的。

    测试和调试的必备工具是firebug。它允许您检查 Ajax 请求、实时调试 JavaScript 等等。

    这是一系列关于使用 ExtJS 编写大型应用程序的文章,这是一本相当不错的读物,包含很多有用的信息。

    在 ExtJS 4 中构建示例应用程序 Part1 Part2 Part3

    对于 ExtJS 3.3 及以下版本 Part1 Part2 Part3

    我认为无论哪种方式都可以使用 ExtJS,如果您刚刚开始,那么做您最熟悉的事情并在此过程中添加一些 ExtJS 的“香料”可能更有意义。也就是说,一旦你开始使用它来创建单页应用程序,并且你的后端只输出 JSON,你可能永远不会回头看你创建 Web 应用程序的旧方式。

    【讨论】:

    • +50 用于 extjs 链接!
    • 请不要使用 Firebug 来调试基于 Ext 构建的应用程序(无意冒犯:))。它像地狱一样减速。 Google Chrome 和 Safari 的开发工具(从 Webkit 的本机增强),提供更好的调试交接
    【解决方案2】:

    您可以做现代基于 AJAX 的应用所做的事情和use the URL hash to deep-link your app

    Gmail 就是一个很好的例子来说明它是如何工作的。要访问我的收件箱,我导航到:

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

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

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

    这两个“页面”都在同一个页面上,当我使用该应用程序时,导航实际上会将我重定向到不同的页面。哈希就是所有的变化。

    当页面加载时,您需要做的是检查window.location.hash 并使用它来更新您应用的状态。

    【讨论】:

    • 是的。但这仍然意味着它是一个单页应用程序。不过,这确实为您提供了设置页面初始状态的可能性。
    • 这是一个单一的页面,但是在 URL 中使用哈希可以让你使事情更加模块化。显然,很难改造现有的应用程序以遵循这一理念,但如果你从头开始,你可以使用页面哈希来模块化加载的内容。您还可以在您的应用中大量使用 IFRAME 标签,以允许您为事物使用单独的页面,并使它们成为您单个页面的内部部分。
    • Gmail、Twitter、Flickr、Yahoo 邮件等 - 所有伟大的基于应用程序的单页网站都大量使用 IFRAME,仅供参考
    【解决方案3】:

    不是单页而是少分页的应用程序

    我参与了一个复杂的项目,该项目基于:

    • Asp.net 3.5
    • WCF 网络服务
    • ExtJS 2.1
    • .netTiers(使用 CodeSmith)用于 DAL + DAO
    • SQL 2005 + OLAP 多维数据集(必须在应用程序内完成一些不会让我想起这个噩梦的变通办法,因为我们使用了一些第三方控件,部分支持 UpdatePanels 并且仅此一项就打破了非常我们的申请的基本处理)
    • 现有 ExtJS 的自定义外观和感觉 - 这是 ExtJS 服装化中最难的部分,所以我建议您坚持提供的主题之一

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

    效果很好。

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

    在调试方面,我们广泛使用 Firebug(Firefox 插件),就像任何其他开发人员一样。

    但是使用 ExtJS 库取得了巨大的成功。它使创建类似桌面的数据密集型 Web 应用程序变得容易。对于任何专业的 Intranet Web 应用程序开发来说,它都是一个很棒的统一库。使用 jQuery 和它的插件,您总是会被社区提供的那些插件的不同怪癖单独留下。 ExtJS 在这方面非常统一,并且提供了非常好的开箱即用的外观和感觉。

    【讨论】:

      【解决方案4】:

      我认为这是一个想法,以某种方式匹配 Web 环境中应用程序的桌面感觉,这意味着几乎所有东西都可以使用 Ajax。

      至于调试,firebug 是你的朋友。但是调试一个桌面应用程序应该没有什么不同,在这个应用程序中也可能涉及到大量的点击来获取错误。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          在测试 ExtJs 方面...

          这是一个测试 ExtJs 组件的测试工具(这个工具是用 ExtJs 做的!)

          Siesta Testing Tool to test ExtJs

          我自己还没有亲自使用过,但是我看了演示视频,感觉很不错!

          也许社区成员可能知道任何专门测试 ExtJs 的替代工具?

          PS:我与 Sencha (ExtJs) 或 Bryntum (Siesta) 没有任何关系。我在客户级别使用 ExtJs。

          【讨论】:

          • 您需要 50 个声望点才能评论其他人的答案。这很容易获得,只需发布​​几个好的答案即可。
          【解决方案7】:

          你不必那样写。有时这种方式看起来不错,而且速度更快(新页面不会刷新)。

          您可以使用一些自动化测试工具或自己编写这些东西来为 javascript 进行自动记录。通常调试整个页面并不是一个好主意。当它以模块化方式构建时,它会更容易。把问题隔离出来,就更容易了。

          还可以考虑使用 firebug 进行调试,它可能会对您有所帮助。

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

          【讨论】:

            【解决方案8】:

            我正在使用带有 ExtJS 的 ASP.Net MVC。不是单页应用,但是很接近,感觉就是一页应用。

            我们还有一个包含数百个页面的 Web 表单应用程序,我们在这个应用程序上应用了一些 ExtJS UI 小部件,使用了很多 IFrame,它仍然可以工作并且看起来很棒。但我不喜欢使用网络表单模型,并尽量避免使用它。

            恕我直言;

            1. asp.net mvc 平台会更好 比网络表单平台。
            2. 控制器非常适合操作处理。
            3. Partials 对于生成 html 内容很有用(脚手架在这里很有帮助)

            ExtJS

            • 用于导航,
            • 上市,
            • 搜索,
            • 编辑内容,
            • 通知,
            • 其他一切都差不多...

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

            【讨论】:

              【解决方案9】:

              在我们的应用程序中,我们编写了一个自定义 Page 类来处理“页面”之间的切换。页面包含的所有内容都是一个返回您的类的 ExtJS 容器,我们通过在 URL 末尾设置 #hash 值来保存历史记录。

              使用这种方法,您只需将 ExtJS 库与所有资产一起加载一次,这会为性能带来巨大的收益并保持您的应用程序流畅。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-12-28
                • 1970-01-01
                • 2011-02-06
                • 1970-01-01
                相关资源
                最近更新 更多