dojo vs extjs for large single page js app

时间:2012-01-17 17:27:30

标签: javascript model-view-controller extjs dojo javascript-framework

我将构建一个非常大的mvc js应用程序管理应用程序并将其缩小到dojo和extjs

我想知道是否有人在过去6个月内对这些框架中的任何一个有任何经验,如果您在以下任何方面遇到任何问题

  • 发展速度
  • MVC
  • 文档
  • 绑定
  • 主题小部件
  • 可搜索的客户端商店(不必离线,只需能够在收到记录后存储记录,然后对这些记录进行本地搜索)
  • 使用像selenium这样的完整堆栈工具进行测试
  • 数据网格,分页,整理整个作品

2 个答案:

答案 0 :(得分:15)

由于Dojo完成了您所需的一切。

Dojo支持完全符合您要求的“商店”。 它们还支持JsonRestStore,XMLStore,HTMLStore等许多不同的东西,因此您可以轻松切换数据源。

关于单元测试,您可以使用名为Dojo Objective Harness的内置工具,它是机器人,或其他类似selenium或eventd(dojo)。

关于MVC,dojo有一个名为dojox.mvc的东西:http://livedocs.dojotoolkit.org/releasenotes/1.7#mvc

虽然还有许多其他事情:)

我建议您阅读这里的教程:http://dojotoolkit.org/documentation/

你的问题有点难以回答,因为我想今天几乎每个体面的框架都可以做你所要求的。每个开发者都会告诉你他更喜欢的框架更好^^

就个人而言,我使用Dojo,我觉得它很强大,特别适合大型应用程序。他们也非常活跃并且跟上最新趋势(AMD Loader RequireJS等)。 还有一个很好的社区,互相帮助,特别是在邮件列表和irc频道。

此外,如果它无论如何重要,IBM等公司都会信任并花时间帮助框架做得更好。

  • 发展速度:好
  • mvc:good
  • 文档:好 - 最近的巨大进步:)
  • 绑定:好
  • 内化:好
  • 小部件的主题:使用LESS rock
  • 一个可搜索的客户端商店(不必离线,只需一旦收到存储记录,然后对这些记录进行本地搜索):好
  • 使用一些完整的堆栈工具测试,例如selenium:good
  • datagrid,分页,排序整个作品:新的d​​grid很棒,旧的网格很好Dojo非常强大,但有时可能很棘手,好的支持可以弥补它

答案 1 :(得分:9)

以下是Ext-JS提供的内容。

这不属于答案,但如果您最终使用Ext-JS,则可能需要以下内容才能获得更好的图表。 Ext图表的优点是它们更易于交互(鼠标悬停,点击),因为它不像flot那样基于画布。

/**
 * Renders a single flot chart, a much simplifed version of ExtFlot
 */
Ext.define('Ext.ux.FlotPanel',  {
    extend: 'Ext.Component',
    alias: 'widget.flot',

    /**
     * @cfg {number[][]} data The data to be drawn when it gets rendered
     */
    data: null,

    /**
     * @cfg {object} flotOptions
     * The options to be passed in to $.plot
     */
    flotOptions: null,

    /**
     * @property
     * The Flot object used to render the chart and to manipulate it in the future. It will only
     * be available after the first resize event
     * You may not set this property but you are free to call methods on it
     */
    flot: null,

    initComponent: function() {
        this.callParent(arguments);
        // The only time that we're guaranteed to have dimensions is after the first resize event
        this.on('resize',  function(cmp) {               
            if (!cmp.flot) {
                cmp.flot = $.plot(cmp.getTargetEl().dom, cmp.data, cmp.flotOptions);
            } else {
                // Flot knows to look at the container's size and resize itself 
                cmp.flot.resize();
                cmp.flot.setupGrid();
                cmp.flot.draw();
            }
        });

        this.on('beforedestroy', function(cmp){
            if (cmp.flot) {
                cmp.flot.shutdown();
            }
        });
    }
});

4年前,当我看到Dojo时,我讨厌它。 Coudl不会在HTML中声明小部件。我宁愿用JS对象声明它们(我听说你现在可以在不指定HTML的情况下声明小部件。有些人喜欢在HTML中创建小部件,但在我的情况下(动态的商业头脑应用程序),屏幕上的每一个部分是动态的,配置来自服务器,所以我不希望服务器生成我的HTML,因为我需要在我的JS中了解它。

无论如何,我对Ext-JS非常满意,没有理由去购买新的框架。