第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子

简介: 第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子

第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子

Hyperevent例子

本节展示了一些超事件Hyperevent例子的示例; 也就是说,使用#server#call指令来执行服务器操作以响应客户机事件。 例如:有一个用于向数据库添加新客户的表单。 一旦输入了客户名称,应用程序就会进行检查,以确保该客户尚未在数据库中。 下面的表单定义在输入内容更改时调用服务器端Find方法。

<form name="Customer" method="POST">
Customer Name:
<input type="Text" name="CName"
onChange=#server(..Find(document.Customer.CName.value))# >
</form>
复制代码

在这种情况下,Find方法可以定义在相同的CSP文件中:

<script language="Cache" method="Find" arguments="name:%String">
 // test if customer with name exists
 // use embedded SQL query
 New id,SQLCODE
 &sql(SELECT ID INTO :id FROM MyApp.Customer WHERE Name = :name)
 If (SQLCODE = 0) {
   // customer was found
   // send JavaScript back to client
   &js<alert('Customer with name: #(name)# already exists.');>
 }
</script>
复制代码

该方法通过返回JavaScript执行与客户机通信。

每当调用服务器端方法时,它写入主体设备的任何输出都被发送回客户机。 在那里,它被转换为JavaScript函数,并由客户端页面在其上下文中执行。

例如,如果一个服务器端方法执行以下代码行:

Write "CSPPage.document.title = 'New Title';"
复制代码

然后将以下JavaScript发送到客户端并执行:

CSPPage.document.title = 'New Title';
复制代码

在本例中,这会将浏览器中显示的标题更改为New title。 任何有效的JavaScript都可以以这种方式发送回客户机。 注意,必须放置一个回车符(使用! 字符),否则浏览器无法执行它。

为了更容易地从服务器方法返回JavaScript, ObjectScript使用&js<>指令支持嵌入的JavaScript。 这是一种特殊的语言构造,它允许在ObjectScript方法中包含JavaScript行。 当编译包含嵌入式JavaScript的方法时,&js<>指令的内容被转换为适当的Write命令语句。 嵌入式JavaScript可以使用#()#指令引用ObjectScript表达式。

例如,Caché方法包含以下内容:

Set count = 10
 &js<
   for (var i = 0; i &lt; #(count)#; i++) {
      alert('This is pleasing!');
      }
 >
复制代码

等价于:

Set count = 10
 Write "for (var i = 0; i < ", count, "; i++) {",!
 Write "    alert('This is pleasing!');",!
 Write "}",!
复制代码

当从客户端调用时,该方法将a pleasing alert box 10 times警告框。

在CSP类中使用#server

要在CSP类中使用超事件和Javascript,必须显式调用超事件代理文件。 如下例所示,将#(..HyperEventHead())#放在<head>结束标记的上方。

Class esl.csptest Extends %CSP.Page [ ProcedureBlock ]
{
ClassMethod OnPage() As %Status
{
   &html<<html>
   <head>
   <script language=javascript>
   function onServer()
   {
      alert(#server(..ServerMethod())#);
   }
   </script>
   #(..HyperEventHead())#
   </head>
   <body>
   <input type=button value="click here" onclick='onServer()' />
   </body>
   </html>>
   Quit $$$OK
}
ClassMethod ServerMethod()
{
   quit "from server"
}
}


相关文章
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
71 0
|
JavaScript 编译器 Go
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
81 0
|
SQL JavaScript 前端开发
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
128 0
|
前端开发 JavaScript 编译器
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
111 0
|
前端开发 程序员 Go
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
118 0
|
JavaScript 前端开发 Go
第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出
第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出
95 0
|
SQL Go
第三十章 使用 CSP 进行基于标签的开发 - 控制流
第三十章 使用 CSP 进行基于标签的开发 - 控制流
85 0
|
SQL 存储 编译器
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
89 0
|
JavaScript 前端开发 Go
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
80 0
|
XML JavaScript 前端开发
第二十七章 使用 CSP 进行基于标签的开发 - CSP 标记语言
第二十七章 使用 CSP 进行基于标签的开发 - CSP 标记语言
96 0