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,
    width: 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: {
            width: 1200,
            height: 600
        },
        data: [
            {
                x: 20,
                y: 20,
                width: 800,
                height: 510,
                tab_count:2,
                tab_text:["标签1","标签2"]
            },
            {
                x: 835,
                y: 20,
                width: 300,
                height: 250,
                tab_count:1,
                tab_text:["标签3"]
            },
            {
                x: 835,
                y: 280,
                width: 300,
                height: 250,
                tab_count:1,
                tab_text:["标签4"]
            }
        ]
    }
};

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。