• NeralJS需求整理及思路


    NeralJs希望通过解析json数据,动态创建和渲染报表,每个报表呈现一定时间范围的数据,通过使用表格图表等不同的方式,使数据的呈现不死板,且更容易看出规律。

    说通俗点,就是动态在一个区域内生成多张图表。

    经过深思熟虑(其实写之前什么都没想,想到一点写一点),有以下几个问题需要考虑:

    1、由于数据是在报表呈现时从后台直接拉取的,那么在json中应该保存的就是这组数据的定义,如何定义?

      如某淘宝商店销售天数据:[10,12,8,9,3,1,12],这些数据都被保存在后台,并被命名为DayIncom,当然天数据每天都有,所以数据库中根据时间存了很多组,所以还需要确定时间区间。如时间是2014/12/5至2014/12/12日。

    最后json中保存格式变成这样:

    {
        title:'淘宝销售天数据',//对应到图例
        uid: 'DayIncome',
        dataRange: { start: '2014/11/8', end: '2014/-1/-1' },
    }

    通过ajax向后台发送请求,请求内容如上,后台解析数据返回需要的内容。

    2、动态数据加载,如果数据组太多,如何减少请求?

      如果一个报表页面每个需要加载10个左右的数据组,那么ajax服务就需要请求10次,不仅效率低下而且服务器会负载,所以需要建立一个ajax的管理模块,将需要请求的数据收集起来,一次发送,同时在接收完毕时触发自定义消息,通知视图管理模块更新图表内容。

    3、ajax管理模块ajaxManager的功能确定

      ajax管理模块需要接收多组如上1中所说的数据对象,并统一发送请求,并允许对象监听请求成功事件,将指定的数据告诉视图管理模块。整理一下这句需求得到下面的几个函数:

    function AjaxManager(){
        void addRequest(info);//接收多组数据对象
        void DoRequest();//统一发送请求
        void OnReady(uid,function);//允许对象监听请求成功事件,并返回对应的数据      
    }

    4、视图管理模块ViewManager的确定

      视图管理模块需要对所有的视图进行管理,考虑到之后可能会需要修改和移动视图的功能,暂定功能为增、删、改。同时,为了模块清晰,功能单一,只是生产一个空的div框,内部实现,如多标签等功能,交给Panel模块实现。模块需要增删,所以不能简单的使用内部index的方式定位到模块(原来有3个div,编号0,1,2。现在删除1号视图框,则2号的实际保存编号变成1),使用随机生成的GUid作为框体的id属性

    {
        x: 20,
        y: 20,
         800,
        height: 510
    }

    5、Panel模块的确定

      Panel模块用于生成多标签的框体,同时控制内部内容的显示。何为内部内容显示,即需要解析json数据,向Ajax管理模块增加ajax请求,并读取返回的内容,渲染图表。

    下图创建一个两个标签的panel:

    {
        tab_count:2,
        tab_text:["标签1","标签2"]
    }

    6、综合

    {
        components: [
            {//对应一个chart控件
                type: 'line',
                series:[
                    {
                        title:'淘宝销售天数据',//对应到图例
                        uid: 'DayIncome',
                        dataRange: { start: '2014/11/8', end: '2014/-1/-1' },
                    }
                ],
                panel_index:"标签2"
            }
        ],
    
        panels: {
            canvas: {
                 1200,
                height: 600
            },
            data: [
                {
                    x: 20,
                    y: 20,
                     800,
                    height: 510,
                    tab_count:2,
                    tab_text:["标签1","标签2"]
                },
                {
                    x: 835,
                    y: 20,
                     300,
                    height: 250,
                    tab_count:1,
                    tab_text:["标签3"]
                },
                {
                    x: 835,
                    y: 280,
                     300,
                    height: 250,
                    tab_count:1,
                    tab_text:["标签4"]
                }
            ]
        }
    };
  • 相关阅读:
    简练网软考知识点整理-项目选择和优先级排列方法
    简练网软考知识点整理-项目基线
    简练网软考知识点整理-项目质量控制七工具之排列图
    简练网软考知识点整理-项目经理应具备的技能能力
    简练网软考知识点整理-项目招投标相关法律
    Scala集合库、模式匹配和样例类
    Scala函数式编程
    Scala面向对象—类详解2(继承相关)
    gVerify验证码
    Scala面向对象—类详解
  • 原文地址:https://www.cnblogs.com/william7neral/p/4184792.html
Copyright © 2020-2023  润新知