Xpage出现后,我们突然发现可以实现视图和Grid的简单绑定,各自获取视图数据突然不再这么麻烦。其实没有Xpage,通过js我们依然可以实现这个的功能?
属性Dojo或Extjs,我们会发现它们的Store只是相同API下对不同数据格式进行了封装,统一了接口方便不同更高级的widget等组件的调用。既然如此我们完全合一自己实现一个Dojo、Extjs的扩展对我们domino数据进行处理,实现一个Domino视图的store对象。也或者我们可以自己写一个Store对象而无需理会Dojo或Extjs。
下面我们就已Dojo的API为原型,自己定义一个Domino视图的Store.js。
注意:此Store对象使用jQuery进行ajax查询,使用AMD模式(requirejs)进行模块的定义。
核心模块:
ViewStore:
负责暴露对我API,实现数据的加载、查询等功能
QueryEngine
负责具体的ajax请求处理,对普通视图访问使用readviewentries进行访问,对搜索查询,字段切换searchview模式。
对应跨域情况,进行跨域逻辑处理(关于跨域可参考另外一片结束Domino跨域解决方案的文章,里面提供的跨域方案基本可以解决所有Domino跨域请求问题)
Adapter
有readviewentries及searchview两个适配器分别处理dxl或者searchview返回的html并转换成Objetc[]数组。
Queryresult
Readeviewdesigner
负责处理item的结构,在searchviewadapter时,实现列于字段名称的映射,已便生产object对象。
通过扩展我们实现的了如下常见
var store = new ViewStore({host:serverhost,db:dbpath,view:viewname})
store.load().then(function(data){
//data为plainObject数组,对应的视图记录
})
store.query({query:{depart:departname}}).then(function(data){
//data为plainObject数组,对应的搜索记录
})
Store.getChildren({parentid:parentid},{chilrdrenproperty:parentid}).then(function(data){
//data为plainObject数组,对应分类视图,类别 parentid下的记录
})
对Extjs 和Dojo内实现更为简单Extjs为例,可以实现一个ext.data.reader即可,最多优化一个proxy实现更友好的ext.data.proxy的配置
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论