`

以Ajax方式显示Lotus Notes视图的javasript类库----NotesView2

阅读更多

一:简介

NotesView2是一个使用javascript开发的开源的ajax组件,他可以让Lotus Notes的视图已ajax的形式显示,不仅界面漂亮,而且给用户很好的体验,下面我们就开始研究下她。

你可以在这里下载到她http://www.openntf.org/projects/pmt.nsf/ProjectLookup/NotesView2

,截止到现在最新的版本为2.1.7,下载后有两个文件,一个是nsf的数据库,另一个是该版本对应的文档,文档里简要介绍了库的使用方式,并没有过多的去讲解他的原理。

下面是使用该库显示的视图样式

Notesview2.JPG

二:NotesView2类库库分析

一共三个js类型的script库NotesView2Lang_en,jsUtility,jsNotesView2.1.7。

1. NotesView2Lang_en中主要以json形式定义了NotesView2Lang对象,主要是提供状态栏,tooltip,prompt,和一些message的提示信息。代码如下:

var NotesView2Lang = {

status_ready : "Ready",

status_loading_data : "Retrieving data...",

status_selected_documents : "$ document(s) selected",

status_jumpto_fail : "Could not find '$'",

status_jumpto_success : "Found '$'",

tooltip_remove_sort : "Remove Sort",

tooltip_sort_ascending : "Sort Ascending",

tooltip_sort_descending : "Sort Descending",

tooltip_expand_category : "Expand Entry",

tooltip_collapse_category : "Collapse Entry",

tooltip_page_up : "Page Up",

tooltip_page_down : "Page Down",

tooltip_scroll_up : "Scroll Up",

tooltip_scroll_down : "Scroll Down",

prompt_jumpto : "Enter the text to jump to:",

prompt_search_input : "Search for: ",

prompt_search_go : "Go",

prompt_clear_search : "Clear Results",

prompt_query_builder : "Query Builder",

msg_search_results : "$ result(s) found",

msg_db_not_indexed : "Database is not full-text indexed (search may be slow)",

msg_db_is_indexed : "Database is full-text indexed",

msg_index_test_failed : "Cannot determine status of full-text index",

msg_startkey_and_restricttocategory_error : "A start key cannot be set when the view is restricted to a single category"

}

2.jsUtility中主要包括将xml文档转换为js对象和对javascript一些原生类型的扩展。有以下函数。

//主要完成xml文档到js对象的转换

1).function loadXMLRequest(url, callback,callbackContext, type, postData);

2).function xmlToObject(xmlDoc,getAttributes,toLowerCase);

//对javascript原生类型的扩展

3).String.prototype.trim = function(c,t);

4).String.prototype.left = function(v);

5).String.prototype.leftBack = function(s);

6).String.prototype.right = function(v);

7).String.prototype.rightBack = function(s);

8).Array.prototype.contains = function(v);

9).Date.prototype.adjust = function(yr,mn,dy,hr,mi,se);

//主要针对firefox等非IE浏览器

10).HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode);

11).HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr);

12).HTMLElement.prototype.insertAdjacentText = function(where,txtStr);

13).function isNotANumber(v)

14).sleep = function(secs, agenturlbase) ;

3.jsNotesView2.1.7该库为核心库,大部分的功能都在这个库中,库中包含这四个对象,每个对象中有一些函数。

1).function NotesView2(db,name);

2).function NotesViewNavigator2(view);

3).function NotesViewEntry2(xml, view);

4).function NotesViewColumn2(col);

 

三:应用和原理分析

1. 拷贝数据库中的代理,script库,css等设计元素

2. 在$$ViewTemplateDefault表单中的必须要加入一个div("viewHolder")容器来呈现试图.

3.HTMl Header中加入以下信息,主要设置DB_NAME和VIEW_NAME

"<script>"+

"var DB_NAME = '/" + @ReplaceSubstring(@WebDbName;"'";"\\'") + "';"+

"var VIEW_NAME = '" + @ReplaceSubstring(@Subset(@ViewTitle;1);"'": "\\";"\\'":"\\\\") + "';"+

"var RESTRICT_TO = '" + @ReplaceSubstring(RestrictTo;"'": "\\";"\\'":"\\\\") + "';"+

"</script>"+

"<LINK REL=\"stylesheet\" TYPE=\"text/css\" href=\"/" + @WebDbName + "/" + sheet + "\">"

4.JS Header中,主要是切换样用并定义oView

var oView;

function changeStyle(){

var i = document.getElementById('styleChanger').selectedIndex;

var sheets = new Array("none.css","plain.css","pretty.css");

document.cookie = "viewstyle=" + sheets[i];

var s = document.location.href;

if(s.indexOf("&cache=") != -1)s=s.left("&cache=");

document.location = s+"&cache="+Math.random();

}

function changeCategory(){

var o = document.getElementById('catChanger');

var cat = o.options[o.selectedIndex].text;

if(o.selectedIndex==0)cat = "";

if(cat){

document.location.href = DB_NAME + '/' + VIEW_NAME + '?openview&restricttocategory=' + escape(cat);

}else{

document.location.href = DB_NAME + '/' + VIEW_NAME + '?openview';

}

}

5.onLoad中添加如下代码:

//创建一个NoteView2对象

oView = new NotesView2(DB_NAME,VIEW_NAME);

//设置一些基本的设定

oView.hideSelectionMargin = true;

oView.openDocument = function(viewEntry){

var cnow = new Date();

var urlString = "jushtnm2/?OpenAgent&JMDocID=0000"+viewEntry.noteId+"');&"+cnow.valueOf();

var winName = "win"+newWinName;

var winWidth = eval(screen.availWidth-10);

var winHeight = eval(screen.availHeight-50);

var jwfDoc=window.open(urlString,winName,'top=1,left=1,fullscreen=no,menubar=no,status,scrollbars=yes,toolbar=no,resizable,height='+winHeight+',width='+winWidth);

jwfDoc.focus();

}

oView.actionButtonDisplay = 3;

oView.linesToShow = 31;

oView.linesToGet = 36;

oView.restrictToCategory = RESTRICT_TO;

//增加试图上方的按钮,可以自定义按钮在此填加

oView.addAction("全部展開", function(){oView.expandAllEntries()});

oView.addAction("全部收合", function(){oView.collapseAllEntries()});

oView.addAction("重新整理", function(){oView.refresh()});

oView.addAction("跳至", function(){oView.jumpTo()});

oView.addAction("查詢",function(){oView.toggleSearchBar();});

create_object_array()

//使用render方法来呈现试图,在render方法中使用?ReadDesign命令来获取试图的xml文档,然后调用loadXMLRequest,xmlToObject等方法进行解析,解析后主要使用drawView()方法来动态画出试图。

oView.render(document.getElementById('viewHolder'));

6. 操作试图上的对象

使用o.navigator.selected来获取一个选中的NotesViewEntry2对象数组

使用o.refresh(), o.expandAllEntries(), o.collaspseAllEntries(), o.jumpTo(), o.toggleSearchBar()这些方法来相应视图上的按钮操作

7. NotesViewEntry2类:

属性(都为只读)

.unid :文档的unid

.position :String, 该实体在视图中的位置, ex: 1.2.3.1

.noteId :String, 该实体的note id

.children :String, 实体的孩子数量

.descendants :String, 实体后代的数量

.siblings :String,实体兄弟的数量

.isResponse :String, 是否为相应文档

.indent :文档在视图中的级别, 使用getLevel()函数来获取精确的结果

.columnValues :a hash of all column values for this entry, access using column number as a string (0 based) ex: var columnThreeValue = entry.columnValues['2']

.isCategory :Boolean, 实体时候分类的标记

.view :a handle to the NotesView2 object this entry is a part of 

.isExpanded :Boolean, 实体当前是否展开的标志

函数:

getLevel() :Number, 返回文档在试图中的级别

8.如果你要想使用搜索功能,可以运行agtSearchView 和 agtIsDBIndexed 代理。

9.以上这些只是初步的研究,以后深入后在写吧.

NotesView2下载

分享到:
评论

相关推荐

    在lotus中用AJAX方式显示视图

    "在Lotus中用AJAX方式显示视图"这一主题,主要是探讨如何在Lotus Notes/Domino应用中集成AJAX技术来优化视图数据的展现。 Lotus Notes/Domino是一种广泛使用的协作平台,其核心组件之一是Notes服务器,它支持数据库...

    最新JQuery类库 -- JQuery1.4

    **jQuery 1.4:一个高效、易用的JavaScript库** jQuery是一个强大的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画设计和Ajax交互。jQuery 1.4是该库的一个重要版本,发布于2010年,带来了许多性能优化...

    Lotus Notes开发教程

    6. **视图(Views)**:视图提供了数据库内容的不同展示方式,可以按照特定的排序或分类规则显示文档。视图有助于用户快速找到和组织信息。 7. **代理(Agents)**:代理是自动执行任务的脚本,可以响应特定事件...

    界面美化Javascript类库zip

    【描述】中提到的“界面美化Javascript类库”是基于流行的JavaScript库jQuery开发的,jQuery以其简洁的API和强大的功能,使得前端开发变得更加便捷。这个类库的核心目标是将传统HTML中的无趣、单调的表单元素——...

    JQuery类库,Javascript类库

    在本例中,jQuery是一个JavaScript类库,它提供了一系列用于DOM操作、事件处理、动画和Ajax请求的工具,使得开发者无需从零开始编写这些功能的代码。 **在JSP和HTML中使用** JQuery可以在多种环境中使用,包括JSP...

    javascript类库及使用说明

    JavaScript 类库是开发者为了简化JavaScript编程,提高代码复用性和可维护性而创建的工具集合。其中,jQuery 是最广为人知且广泛应用的类库之一,它极大地简化了DOM操作、事件处理、动画效果和Ajax交互。在...

    JavaScript类库

    JavaScript类库是开发Web应用程序的重要工具,它们提供了一系列预先封装好的功能,可以帮助开发者更高效、更便捷地实现各种复杂的交互效果和功能。JavaScript作为一种广泛应用于客户端浏览器的编程语言,其类库极大...

    Kajax:一个PHP类库-开源

    **Cajax-20051021压缩包内容:** 这个版本的压缩包可能包含了Kajax的源代码、示例、文档以及可能的测试文件。通过解压并研究这些文件,你可以更好地了解如何在实际项目中使用Kajax,同时也可以查看其内部工作原理,...

    Lotus Domino BS开发 --Lotus历史简介

    进入21世纪,Notes/Domino继续升级,如Notes/Domino 6、6.5、7、8及8.5版本,逐步适应了Web 2.0时代的趋势,强化了Web应用程序支持,引入了AJAX技术,提升了用户体验,并加强了与IBM其他产品的集成,如Lotus ...

    Ajax-advanced-web-developer-bootcamp-notes-examples-and-exercises.zip

    Ajax-advanced-web-developer-bootcamp-notes-examples-and-exercises.zip,例题和练习汇编。来自优秀的高级web开发人员训练营,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和...

    ajax方式展示domino视图

    在这个特定的场景中,“ajax方式展示domino视图”指的是使用Ajax技术来实现在Lotus Domino环境中动态加载和交互视图数据。 Lotus Domino是一款强大的协作软件,它提供了基于文档的数据存储系统,视图是其核心功能之...

    javascript类库源代码

    javascript类库源代码,包括HTML网页编辑器,异步Ajax类,鼠标事件类,窗口类,绘图类,分位整数树类等,智能分辨IE与firefox,智能分辨页面编码UTF8与GB2312,调用简单。需要服务器端相关类库,可以QQ[472179624]联系我获得...

    X-Tool轻量级javascript类库1.0.1

    **X-Tool轻量级JavaScript类库1.0.1** X-Tool是一个专为Web开发者设计的免费开源JavaScript框架,其核心理念是提供轻量级的解决方案,以简化前端开发工作。版本1.0.1是这个项目的一个重要里程碑,它在保持高效性能...

    一个基于ajax+js实现的动态TooTip类库源码及例子程序

    通过分析这些文件,我们可以了解到这个类库的工作方式:JavaScript代码负责处理事件监听(如鼠标悬停)、Ajax请求以获取提示信息,CSS用于定义TooTip的外观,而HTML页面则展示了如何在实际项目中集成和使用这些功能...

    Lotus Domino BS开发--数据库web url格式+代码+前端后端类

    - **JavaScript**:常用于客户端页面交互和AJAX操作。 - **HTML**:构建网页的基本标记语言。 5. **LotusScript的前端和后端类**: LotusScript提供了两类主要的类: - **前端类**(Client-side Classes):...

    API中文版集合包括.net-ajax-php-javascript-html-css-jquery-mysql- - - -

    2. **AJAX(Asynchronous JavaScript and XML)**:AJAX是一种创建动态网页的技术,通过在后台与服务器进行少量数据交换,使网页实现异步更新。它主要依赖JavaScript,利用XMLHttpRequest对象实现客户端与服务器的...

    JsJava2.0最新Javascript类库下载

    9. **Ajax通信**:`jsjava-ajax-2.0.js`模块简化了异步请求,提供了更高级别的抽象,使开发者可以更方便地与服务器进行交互。 10. **XML处理**:`jsjava-xml-2.0.js`包含了处理XML文档的工具,包括解析、操作和序列...

    Ajax-JavaScript-AJAX-JSON.zip

    Ajax-JavaScript-AJAX-JSON.zip,基本ajax json jquery,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况...

    基于dhtml+ajax实现的漂亮日历calendar源码类库例子

    2. **AJAX**:AJAX的核心在于异步数据交换,它使得网页可以后台与服务器通信,无需用户显式等待页面刷新。在日历应用中,AJAX可能用于获取服务器上的事件数据,或者向服务器发送用户的选择,如添加新的约会。例如,...

Global site tag (gtag.js) - Google Analytics