• 第三十四章 使用 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这种情况下,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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

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

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

     Write "CSPPage.document.title = 'New Title';"
    
    • 1

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

    CSPPage.document.title = 'New Title';
    
    • 1

    在本例中,这会将浏览器中显示的标题更改为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!');
          }
     >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    等价于:

     Set count = 10
     Write "for (var i = 0; i < ", count, "; i++) {",!
     Write "    alert('This is pleasing!');",!
     Write "}",!
    
    • 1
    • 2
    • 3
    • 4

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

    在CSP类中使用#server

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

    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"
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    设计模式-单例模式
    Go基础——基础语法
    uni-appH5修改端口号
    remote: Permission to xxxxx.git denied to xxxxx.
    废弃的kotlin-android-extensions,是时候接受ViewBinding了
    JavaSE——集合框架二(6/6)-(案例)补充知识:集合的嵌套(需求与分析、问题解决、运行测试)
    从TiDB迁移到OceanBase的实践分享
    Python框架篇(2):FastApi-参数接收和验证
    【单片机】16-LCD1602和12864和LCD9648显示器
    让STM32CubeMX带你飞,菜鸟秒变STM32高手
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/127644745