发明内容
为了解决数据量大的情况下web浏览器卡死的问题,提高树形控件的数据处理速度,本发明实施例提供了一种树形控件数据处理的方法和装置,所述技术方案如下:
一种树形控件处理数据的方法,所述方法包括:
视图控制器接收消息,根据所述消息的类型将所述消息分配给相应的控制器,所述消息的类型为请求和响应;
控制器处理所述消息,当处理完所述消息后,处理下一同类型的消息;
其中,当所述消息为请求时,接收消息之前包括:
树形控件根据用户的点击信号向注册在树上的监听器发送点击事件;
所述监听器根据所述点击事件生成请求;
当所述消息为响应时,接收消息之前包括:
树形控件接收外部向所述树形控件加载的数据;
编辑器将所述数据根据相应的条件封装成所述响应,并将所述响应发出;
其中,所述监听器根据所述点击事件生成请求具体包括:
所述监听器根据预设的条件判断是否需要生成请求,如果是,生成请求并将所述请求发出;如果否,结束。
编辑器将所述数据根据相应的条件封装成所述响应具体包括:
编辑器判断所述数据是否为空,如果是,结束;如果否,将所述数据根据相应的条件封装成所述响应。
一种树形控件处理数据的装置,所述装置包括:
视图控制器,用于接收消息,根据所述消息的类型将所述消息分配给相应的控制器,所述消息的类型为请求和响应;
所述控制器,用于处理所述消息,当处理完所述消息后,处理下一同类型的消息;
监听器,用于接收树形控件根据用户的点击信号向注册在树上的所述监听器发送的点击事件,并根据该点击事件生成该请求;
编辑器,用于将树形控件接收到的外部向所述树形控件加载的数据,根据相应的条件封装成所述响应,并将所述响应发出;
其中,所述监听器还用于根据预设的条件判断是否需要生成请求,如果是,生成请求并将所述请求发出;如果否,结束。
所述编辑器还用于判断所述数据是否为空,如果是,结束;如果否,将所述数据根据相应的条件封装成所述响应。
本发明实施例提供的技术方案带来的有益效果是:
通过改变消息处理流程,在接收到请求后,对其进行处理,不等待该请求的响应返回即处理下一个请求,并且在接收到响应后,应用类似的直接处理的方式达到请求和响应的异步处理,使得树形控件具备良好的扩展性,并满足异步的延迟加载。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在介绍本发明提供的树形控件处理数据的方法之前,首先对本发明所采用的树形控件进行简要的介绍:
本发明实施例中提供的树形控件采用了Flex树的扩展(即UITree),UITree继承自Flex原有的树,并在其基础上增加了如下几个功能模块:内容提供单元、展现提供单元、添加和移除监听单元以及模型映射单元。
下面分别对各个增加的功能模块进行说明:
1、内容提供单元
由于Flex树是通过数据驱动来展现给用户的,所以,如果本发明实施例采用的树形控件接收到的外部提供的数据格式不能满足Flex树的数据格式,该树形控件需要对数据格式进行转换。而内容提供单元就是提供这种数据格式转换功能的功能模块。内容提供单元实际上是一个接口,具体的数据转换实现可以预先设定或由技术人员进行二次开发。
2、展现提供单元
由于Flex树是通过数据驱动来展现给用户的,但是如果本发明实施例采用的树形控件提供的或者接收到的数据存在业务语义、或者展现给用户查看的只是数据的一小部分时,需要将数据进行转换,而展现提供单元就是提供这种转换展现功能的功能模块。展现提供单元实际上是一个接口,具体的数据展现可以预先设定或由技术人员进行二次开发。
举例说来,树形控件接收到一个“1”,而这个1为后台的控制数据,并代表“男”,所以在树形控件将这个数据展现给用户时,需要将“1”转换成“男”,而展现提供单元即为完成这一转换功能。
需要说明的是,内容提供单元的转换功能是针对Flex树绑定的数据的结构而言,而展现提供单元的转换功能是针对Flex树显示给用户的内容。
3、添加和移除监听单元
监听的主要作用是产生请求,所以要想在操纵树的时候产生请求,就需要通过添加和移除监听单元在树上添加监听,同理,当需要移除树上的监听时,也可以通过添加和移除监听单元移除树上的监听。用户可以自行定义触发监听从而产生请求的条件,本发明实施例以树监听到点击树节点信号时产生请求为例进行说明。
4、模型映射单元
该单元会定期或者在一定的触发条件下保存某一时刻树对应的数据结构,这样做的原因在于,当有新的数据从外部加载进来时,可能需要加载到树的某个位置上,而对于现有的Flex树是不保存树与其数据结构之间的映射关系的,则可能需要从头开始寻找数据需要加载的位置,而模型映射单元的功能使得上述情况下,可以直接从该单元的模型中找到数据需要加载的位置,直接将数据加载到该位置即可展现给用户,很大地提高了数据的加载效率。
实施例1
本实施例提供了一种树形控件数据处理的方法,该方法使得树形控件实现了处理数据的请求与响应之间的异步,参见图1,该方法包括:
101:视图控制器接收消息,根据该消息的类型将该消息分配给相应的控制器;
102:控制器处理该消息,当处理完该消息后,处理下一同类型的消息。
其中,该消息的类型大体可以分为请求和响应,在请求消息和响应消息中还可以根据其请求或响应的内容不同分成多种类型的消息。
该方法具体可以分为:当消息为请求时的请求过程和当消息为响应时的响应过程。
参见图2所示,请求过程具体包括:
201:树形控件接收到用户的点击信号;
其中,为了展开树形控件以查看其包括的具体数据内容,用户会通过点击树形控件的相应节点来发送信号给树形控件。
采用UITree实现的树形控件,满足了异步延迟加载树形展现的功能。
202:树形控件向注册在树上的监听器发送一个点击事件;
需要说明的是,所有注册在树上的监听器需要实现IUIListener的接口,且该点击事件还包括当前节点绑定的数据。
203:监听器根据预设的条件判断是否需要生成请求;
如果是,执行步骤204;
如果否,执行步骤207。
具体地,判断是否需要生成请求的预设的条件可以是根据节点的某部分数据,也可能是根据触发的时间,可以预先设定或由技术人员进行二次开发。
例如,当该节点数据中包含表示请求扩展的数据,则生成请求。
204:监听器根据点击事件生成请求,并将生成的请求发送至视图控制器;
具体地,监听器是根据点击事件中携带的节点生成请求的,可以是根据节点绑定的某部分数据,也可能是根据该节点触发的时间类型,也可以是上述两者的结合。例如,如果节点触发的时间在预设的允许生成请求的时间段内,则生成请求。
需要说明的是,该请求的类型可以预先设定或由技术人员进行二次开发,但,其类型必须是继承类Request的类型,该类型可以根据需求继承类Request并扩展。
205:视图控制器判断其接收到的请求的类型,并根据请求的类型交给相应的控制器对该请求进行处理;
其中,视图控制器用于分配请求,而不对请求进行处理,而控制器则用于根据视图控制器的判断结果对请求进行处理。
需要说明的是,当用户向树上注册监听器时,是通过视图控制器向树上注册的,即将所有的监听注册到视图控制器上,再由视图控制器选择合适的时机注册到树上,解耦了树与用户的具体监听器实现,让用户的关注点在事件进而产生请求,而不用关心如何将监听器注册到树上。
206:相应的控制器对其接收到的请求进行处理完成,该请求处理完成后,继续处理下一请求;
具体地,控制器根据请求类型处理完成该请求,例如,请求类型为向外部请求数据,则由控制器向外部请求数据;请求类型为展现出一个loading节点等等,则由控制器执行该请求。
207:结束。
需要说明的是,当相应的控制器对其接收到的请求进行处理完成之后,继续执行下一请求。上述步骤201-207是对请求进行处理的过程,每接收到一个请求均进行上述处理,在视图控制器处进行分配时无需进行排队,在根据消息的类型将其分配给相应的控制器后,控制器对其进行处理,该处理仅代表执行该请求,而不包括等待该请求的响应来临,且这些处理的过程的并行的,处理后,由于接收到请求的类型的不同,不同的控制器接收到不同的请求,每个控制器处理完该请求后即可继续执行下一个请求,通过这种请求和响应异步处理的方式,不仅避免了卡死的情况,而且加快了执行速度。
参见图3所示,响应过程具体包括:
301:树形控件接收到外部向其装载的数据;
302:Editor(编辑器)判断数据是否为空;
如果是,执行步骤306;
如果否,执行步骤303。
其中,Editor的作用是根据外部载入的数据产生响应。
303:Editor将数据根据相应的条件封装成响应,并发送给视图控制器;
304:视图控制器根据接收到的响应类型,交给相应的控制器;
305:相应的控制器处理接收到的响应,该响应处理完成后,继续执行下一响应;
例如,将数据装载到树形结构的相应位置上等。
306:结束。
需要说明的是,当对接收到的响应处理完成之后,继续执行下一响应。上述步骤301-206是对响应进行处理的过程,每接收到一个响应均进行上述处理,在视图控制器处进行分配时无需进行排队,在根据消息的类型将其分配给相应的控制器后,控制器对其进行处理,该处理仅代表执行该响应,而不包括等待该响应的响应来临,且这些处理的过程的并行的,处理后,由于接收到响应的类型的不同,不同的控制器接收到不同的响应,每个控制器处理完该响应后即可继续执行下一个响应,通过这种响应和响应异步处理的方式,不仅避免了卡死的情况,而且加快了执行速度。
参见图4,本发明实施例提供了一种上述扩展的Flex树形控件的使用示意图。
如1,当用户点击21时,发出请求21的数据的请求,而当前21处不存在数据,则树形控件生成一个请求并将该请求发出,并同时展开一个Loading节点;
如2,当用户点击更多节点时,树形控件发出一个请求,并同时展开一个Loading节点;
如3,当用户点击21节点时,同时发出了一个显示该节点树形的请求;
如4,当用户选择下拉列表的节点时,可以延迟加载并定位选中节点,并显示其属性信息。
上述请求依次发出,不等待请求对应的响应返回,即处理后续接收到的请求。
通过改变消息处理流程,在接收到请求后,对其进行处理,不等待该请求的响应返回即处理下一个请求,并且在接收到响应后,直接处理的方式达到请求和响应的异步处理,使得树形控件具备良好的扩展性,并满足异步的延迟加载。
实施例2
本实施例提供了一种树形控件数据处理的装置,该装置使得树形控件实现了处理数据的请求与响应之间的异步,参见图5,该装置包括:
视图控制器501,用于接收消息,根据该消息的类型将该消息分配给控制器500;
控制器500,用于处理来自视图控制器501的该消息,当处理完该消息后,处理下一同类型的消息。
该装置还包括:
监听器500,用于接收树形控件根据用户的点击信号向注册在树上的该监听器500发送的点击事件,并根据该点击事件生成该请求。
该监听器500还用于根据预设的条件判断是否需要生成请求,如果是,生成请求并将该请求发出;如果否,结束。
该装置还包括:
编辑器503,用于将树形控件接收到的外部向该树形控件加载的数据,根据相应的条件封装成该响应,并将该响应发出。
该编辑器503还用于判断该数据是否为空,如果是,结束;如果否,将该数据根据相应的条件封装成该响应。
本实施例提供的装置,与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
通过改变消息处理流程,在接收到请求后,对其进行处理,不等待该请求的响应返回即处理下一个请求,并且在接收到响应后,直接处理的方式达到请求和响应的异步处理,使得树形控件具备良好的扩展性,并满足异步的延迟加载。
本发明实施例可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,例如,计算机的硬盘、缓存或光盘中。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。