leoyin
作者leoyin·2014-06-23 13:34
软件开发工程师·海康

Domino WEB 应用开发(3)—— 通过JS封装Domino数据查询

字数 1598阅读 2631评论 0赞 1
           在重型JS包内,例如Dojo或者Extjs都存在Store对象,如果对熟悉Dojo或Extjs的朋友会发现,这些js工具包的Store对象确实很方便我们创建Grid、各类列表已经各选择时ajax进行数据查询。但是这些对象都需要数据源格式符合我们的要求,因此很难在Domino平台下使用。

         Xpage出现后,我们突然发现可以实现视图和Grid的简单绑定,各自获取视图数据突然不再这么麻烦。其实没有Xpage,通过js我们依然可以实现这个的功能?

 

        属性DojoExtjs,我们会发现它们的Store只是相同API下对不同数据格式进行了封装,统一了接口方便不同更高级的widget等组件的调用。既然如此我们完全合一自己实现一个DojoExtjs的扩展对我们domino数据进行处理,实现一个Domino视图的store对象。也或者我们可以自己写一个Store对象而无需理会DojoExtjs

 

          下面我们就已DojoAPI为原型,自己定义一个Domino视图的Store.js

注意:此Store对象使用jQuery进行ajax查询,使用AMD模式(requirejs)进行模块的定义。

 

核心模块:

ViewStore

负责暴露对我API,实现数据的加载、查询等功能

QueryEngine

负责具体的ajax请求处理,对普通视图访问使用readviewentries进行访问,对搜索查询,字段切换searchview模式。

对应跨域情况,进行跨域逻辑处理(关于跨域可参考另外一片结束Domino跨域解决方案的文章,里面提供的跨域方案基本可以解决所有Domino跨域请求问题)

Adapter

readviewentriessearchview两个适配器分别处理dxl或者searchview返回的html并转换成Objetc[]数组。

Queryresult

 

Readeviewdesigner

负责处理item的结构,在searchviewadapter时,实现列于字段名称的映射,已便生产object对象。

 

通过扩展我们实现的了如下常见

 

var store = new ViewStore({host:serverhost,db:dbpath,view:viewname})

store.load().then(function(data){

//dataplainObject数组,对应的视图记录

})

store.query({query:{depart:departname}}).then(function(data){

//dataplainObject数组,对应的搜索记录

})

Store.getChildren({parentid:parentid},{chilrdrenproperty:parentid}).then(function(data){

//dataplainObject数组,对应分类视图,类别 parentid下的记录

})

 

对Extjs 和Dojo内实现更为简单Extjs为例,可以实现一个ext.data.reader即可,最多优化一个proxy实现更友好的ext.data.proxy的配置

 代码参考:https://github.com/leoyin/jQueryStore

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广