首页 > 其他分享 >第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子

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

时间:2022-11-02 07:44:05浏览次数:51  
标签:Write 客户机 JavaScript Hyperevent 方法 CSP 第三十四章

第三十四章 使用 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"
}

}

标签:Write,客户机,JavaScript,Hyperevent,方法,CSP,第三十四章
From: https://www.cnblogs.com/yaoxin521123/p/16849773.html

相关文章

  • 洛谷 P8820 [CSP-S 2022] 数据传输 题解
    首先考虑对于每一次询问暴力DP。设\(f_{u,i}\)表示从\(s\)开始,传到一个到\(u\)距离为\(i\)的点,需要的最短时间。当\(k=3\)时,可能会传到不在\(s\tot\)路......
  • 2022 CSP-S GX 迷惑行为大赏(P1 文件读写篇)
    文件的的读写错误一直都被oier们深恶痛绝津津乐道,我们在看乐子bushi的同时也应该注意,不要一失足成千古恨,3年oi一场空。在广西的S组选手中,有21份代码中出现了//freo......
  • CSP2022 反思
    首先挖一下坟最后还是错了脑瘫错误。。。。。。。。。。。。。。。。。。。。。。。。。。。。。T1大概是60(用spfa然后深搜),然而lyx大佬发现原来跑n遍迪杰斯特拉就满了(我......
  • CSP 2022 游记
    高一老年人拉,还有最后一个月的OI生涯。初赛乱打,反正是过了(去杭州的路上在借py的手机打元,上一次打元还是中考回去时候,那次加特林技能一开狂暴5s秒杀Boss(。CSP前......
  • CSP2022 游记
    Day-1,-2,-3...每天模拟赛都被吊打,心情烦躁。Day0高强度打摆训练,考前打摆加\(\text{RP}\)。Day1上午睡到\(12\)点,没有考\(\text{J}\)组。下午考场在自己学校......
  • CSP & NOIP 2022 邮寄
    开坑了。2022/09/18上午在家看了一上午番。下午到CSSYZ门口,发现只有少部分同学已经到了,于是尾随一位女同学去了文具店,买了些笔。重新到校门口,打算去教室放下书包,中途......
  • P8819 [CSP-S 2022] 星战 题解
    思路考前练习了特别多的随机权题目,但是考场上考了我们整个机房都没做出来。通读题目,发现如果当前可以进行反攻了,只有此时的所有点的出度均为一。考虑它的四个操作。给......
  • P8818 [CSP-S 2022] 策略游戏 题解
    思路题意:求一个特定矩形中每一行的最小值的最大值。考虑分类讨论。注意,由于\(0\)也需要考虑,所以下文中的正数和负数都包括了\(0\)。\(\text{a}\)全部都是正的。......
  • CSP-S 2022 游寄+缇解
    游寄怎样更多流水账?摘要只是因为考前等车在《百年孤独》,所以找点东西魔怔(草Day-1纯纯文化课生,文化课了一个月。呃呃,周五周六有羟基补课。家长说周五上语英,逃跑计划......
  • CSP2022游记
    第一次几乎完全没有准备的比赛也是倒数第二场比赛Day-1上了一天文化课,晚上还有强基班。强基班上完之后来机房写了几个板子就开始颓废了基本上就抱着摆烂的心态不过......