smartjs - DataManager 场景示例分析 - 数据懒加载
发一张policy的参数图设置图:

场景1 - 数据的懒加载/延迟加载
在很多时候,为了提高网页的加载速度,减少不必要的开销,会将页面的数据拆分成几个部分,首先加载呈现可视区域内的数据,然后剩下来的会在需要的时候在进行加载。
而这种按需加载的数据又分为两种:
1.按照需要进行加载;可以是由某个动作触发来引起,比如:tab,查看更多等;
2.采用缓存的方式;对后续动作的预知,提前将后续的数据加载进来,放入到缓存中;等需要的时候能提供快速的响应;比如:很多igrid的滚动分页
那么来看一下在dataManager如何快速简单的完成这两种方式,首先以一个用户信息关联项目为的例子:
//服务端的user数据转成前端model数据
var userData = {
id: 1,
name: "user1",
age: 20,
role: "tester",
//关联projectid
projectId: 1
}
//项目数据的model数据
var projectData = {
id: 1
name: "smartjs",
ver: "0.3"
}
第一种按需加载方式:
//创建一个object的对象
var user = dataManager.create("object", {
//设置主键字段
key : "id",
//get动作的策略
get: {
//定义数据服务
dataServices: {
//ajax数据服务
dsType: "ajax",
//默认的请求url地址;根据id查询
url: "services/user/{id}",
//field规则映射
fieldMapping: {
//project的查询地址
project: "services/project/{projectId}"
}
}
}
}) //首先通过id=1的条件,查询user
user.get({
//设置查询参数,默认匹配key字段
params : 1,
//执行成功,数据填充到dm,并执行成功方法
success : function(result){
//进行数据渲染
renderUser(result);
}
}) //当需要查询项目信息时
user.get({
//查询的字段;dm会根据field匹配到fieldMapping的ajax设置,从而拿到数据
field : "project",
//执行成功,数据填充到dm,并执行成功方法
success : function(result){
//进行数据渲染
renderProject(result);
}
})
使用了两个get的方法,第一个查询user信息,第二个查询project信息;project查询会根据field找到fieldMapping对于的配置,根据dm内部的数据格式化url参数,然后在发送请求
第二种缓存方式
如果采用缓存方式,预期在查询玩user后,想延迟2s在加载project信息,那么应该怎么做?答案是:使用dataManager的trigger
var user = dataManager.create("object", {
//设置主键字段
key: "id",
//get动作的策略
get: {
//定义数据服务
dataServices: {
//ajax数据服务
dsType: "ajax",
//默认的请求url地址;根据id查询
url: "services/user/{id}"
},
//定义触发器
trigger: [{
name: "get project",
//延迟2s
delay: 2000,
field: "project",
dataServices: {
//ajax数据服务
dsType: "ajax",
//project的查询地址
url: "services/project/{projectId}",
},
//触发器执行成功,数据填充到dm数据的project字段中,并执行成功方法
success: function(result) {
//进行数据渲染
renderProject(result);
}
}]
}
})
//首先通过id=1的条件,查询user
user.get({
//设置查询参数,默认匹配key字段
params: 1,
//执行成功,数据填充到dm,并执行成功方法
success: function(result) {
//进行数据渲染
renderUser(result);
}
})
从例子中可以看到,不需要定义field的映射;而是通过设置trigger来完成;trigger会在get动作时触发(默认的策略为有从dataServices请求时触发);延迟2s发送ajax请求拿到数据,执行trigger的success
结尾
目前提供的都是一些伪代码,大家可以看下处理的思路;dataManager-object、table,tree和还有很多的dataService都还没完成;想这样使用的话,还得等一段时间。
现在贴出来也是想抛砖引玉,大家有比较好的场景也可以说一下,看dataManager能否支持。
不过dataManager的引擎已经完成了初步。有兴趣的同学可以自己根据引擎创建出适合自己使用的数据管理和数据服务。
当然等后面SmartJs功能完善后,使用会比例子中更加简单,而且功能也更加强大。
后面还会介绍 “数据自动同步”,“多数据服务通信”,“消息订阅”几个场景,对于使用的最多的table类型的数据就不多做介绍了,因为dataManager-table会在下一版中发布,到时会有很多丰富的例子。
smartjs - DataManager 场景示例分析 - 数据懒加载的更多相关文章
- JPA数据懒加载LAZY配合事务@Transactional使用(三)
上篇博文<JPA数据懒加载LAZY和实时加载EAGER(二)>讲到,如果使用懒加载来调用关联数据,必须要保证主查询session(数据库连接会话)的生命周期没有结束,否则,你是无法抽取到数 ...
- JPA数据懒加载LAZY和实时加载EAGER(二)
懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载,懒加载是在属性被引用时,才生成查询语句,抽取相关联数据.而实时加载则是执行完主查询后,不管是否 ...
- JPA数据懒加载LAZY和实时加载EAGER(转)
原文:https://www.cnblogs.com/MrSi/p/8081811.html 懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载, ...
- WPF ListView 数据懒加载
实现方式:当滑动条触底时,加载数据 xaml代码: <ListView ScrollViewer.ScrollChanged="ListView_ScrollChanged" ...
- VUE 实现监听滚动事件,实现数据懒加载
methods: { // 获取滚动条当前的位置 getScrollTop() { let scrollTop = 0 if (document.documentElement && ...
- JPA的懒加载
JPA数据懒加载LAZY和实时加载EAGER(二) 懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载,懒加载是在属性被引用时,才生成查询语句 ...
- hibernate懒加载(转载)
http://blog.csdn.net/sanjy523892105/article/details/7071139 懒加载详解 懒加载为Hibernate中比较常用的特性之一,下面我们详细来了解下 ...
- Hibernate懒加载深入分析
Hibernate懒加载深入分析 懒加载可以提高性能吗? 不可以简单的说"能",因为Hibernate的关系映射拖累了SQL的性能,所以想出懒加载来弥补.只是弥补而以,不会超越. ...
- Hibernate中的一级缓存、二级缓存和懒加载(转)
1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...
随机推荐
- iOS -iPhone5、iPhone5s、iPhone6、iPhone6Plus 屏幕适配
现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼.用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力.使用AutoLayout虽然会在不同尺寸的屏幕下自动布局, ...
- 解决真机调试时Eclipse DDMS上打不开/data目录的问题
一般真机调试时DDMS里面的File Explorer是不能打开/data 目录的,不过也很容易解决. 1.首先手机要root.这个很简单,网上一大堆资料和软件. 2.仅仅root之后还不行,下载一个 ...
- Python:如何显示进度条
首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
使用C#实现加减乘除算法经常被用作新手练习.本篇来分别体验通过委托.接口.匿名方法.泛型委托来实现. 使用委托实现 加减乘除拥有相同的参数个数.类型和返回类型,首先想到了使用委托实现. //创建一个委 ...
- C# 传入引用类型的参数 返回值是否发生变化
前一段时间做项目是,一YY说如果一个方法的参数是引用类型,那么在这个方法里面所做的所有的修改再方法调用后应该有体现.事实是这样的吗? 先看code 和运行结果: 运行结果 方法SetPersonInf ...
- Windows8和CentOS6.4(64)双系统硬盘安装(图文)【转】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://asange.blog.51cto.com/7125040/1193980 最近在 ...
- C++ 代码换行
1.字符串太长,换行显示,怎么办?2.使用反斜杠,如下: string str = "abcd\ 1234"; 注意:反斜杠后面不准有任何字符.下一行开头的制表符不包含在整个字符串 ...
- Python的列表推导式
1.列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- codi ...
- Mysql 字符串截取
1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_con ...
- spring之ControllerAdvice注解
@ControllerAdvice是Spring 3.2新增的注解,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上. Contr ...