首页 > 其他分享 >第五十一章 开发自定义标签 - 使用%CSP.Rule方法

第五十一章 开发自定义标签 - 使用%CSP.Rule方法

时间:2022-11-19 07:22:16浏览次数:52  
标签:OnMatch .. 自定义 ## Rule 规则 方法 CSP

第五十一章 开发自定义标签 - 使用%CSP.Rule方法

类中的%CSP.Rule包含几个可在 <csr> 规则定义中使用的实例方法。这些方法可以是两种类型之一:

  • 只读并返回元素值的方法

    • GetAttribute

    • GQuoteAttribute

    • GGetAttributesOrdered

    • GIsDefined

  • 修改文档对象模型中元素的方法.

    • InnerText

    • AddChildElement

    • SetAttribute

    • OnMatch

GetAttribute Method

GetAttribute(name As %String, default As %String = "")

GetAttribute方法获取该元素的HTML属性名的值。该值已经解析了任何##( )####''##表达式。

以下示例设置HTML 表格 的名称和大小:

    Set tablename=##this.GetAttribute("NAME")
    Set maxcols=##this.GetAttribute("COLS")
    Set maxrows=##this.GetAttribute("ROWS")

QuoteAttribute Method

QuoteAttribute(name As %String, default As %String = "")

QuoteAttribute方法获取该元素的HTML属性名的值。用解析的#()###( )####''##表达式对值进行引用以进行替换。

以下示例摘自 <csp:loop>标记,它包含四个属性:一个类型为string ( "counter "),三个类型为integer ("FROM "、" STEP "和" TO ")。它检索它们的值并将它们作为字符串打印在CSP页面上:

<SCRIPT LANGUAGE=Cache RUNAT=COMPILER>
    New counter,from,step,to
    Set counter=..GetAttribute("counter","counter")
    Set from=..QuoteAttribute("FROM",1)
    Set step=..QuoteAttribute("STEP",1)
    Set to=..QuoteAttribute("TO",1)
    Do ..NewBlock()
    Do ..WriteServer(" For "_counter_"="_from_":"_step_":"_to_" {")
</SCRIPT>

GetAttributesOrdered Method

GetAttributesOrdered(ByRef paramsordered)

GetAttributesOrdered方法返回有序数组中的所有参数。

IsDefined Method

IsDefined(name As %String)

方法IsDefined指示是否定义了HTML属性名。

 If ..IsDefined("CAPTION") {
     Do ..WriteServer(setCmd
                      _ " nvp(""CAPTION"") = "
                      _ ..QuoteAttribute("CAPTION"))
 }

InnerText Method

InnerText()

InnerText方法获取开始和结束标记中包含的文本。

此方法可用于收集标记内容,并用语言和域属性指定的文本替换标记内容。

 Set %text=##class(%CSP.TagLanguage).GetText(##this,..InnerText())

AddChildElement Method

AddChildElement(atom As %CSP.AbstractAtom)

AddChildElement方法向该元素添加一个子原子。

SetAttribute Method

SetAttribute(name As %String, value As %String)

SetAttribute方法将该元素的HTML属性名设置为value

如果没有指定“NAME”属性,下面的示例将“NAME”属性设置为默认值(“FORM”):

    If ('..IsDefined("NAME")) {
        Do ..SetAttribute("NAME","FORM")
    }

OnMatch Method

OnMatch(rule As %CSP.Rule) returns %Status

规则的默认OnMatch方法是什么都不做。OnMatch可能会被用户规则覆盖。

我需要解释这个方法做什么——一般来说;它如何检查规则以查看它们是否匹配。

创建由应用程序中所有CSP页继承的公共代码的一种方法是重写OnMatch方法。

将所选规则添加到规则DOM后,将调用每个匹配规则的OnMatch方法。当规则匹配时——如果多个规则以相同的选择性匹配,那么将调用每个OnMatch。不应该依赖顺序,因为它取决于编译顺序和其他因素。

传递给OnMatch方法的rule类实例是已放入DOM的选定规则;该规则是最匹配的规则(根据与XSLT选择性规则非常相似的规则)。使用这个最具选择性的规则调用所有匹配规则类中的OnMatch

OnMatch方法可以通过传入的规则修改DOM。示例规则的选择性低于内置系统规则;这允许继续执行默认行为。OnMatch回调就是为此目的而设计的,因为它在规则匹配时被调用,即使它不是最具选择性的规则。作为样例的替代方案,可以创建一个定制规则,将其添加到DOM中,然后在页面类生成期间遍历DOM时对其进行进一步修复。这个选项是可能的,但更复杂。

可以将代码放入自己的规则中,而不是覆盖OnMatch方法。我们不建议覆盖系统规则。

覆盖系统提供的规则(尤其是htmlheadbody)需要非常小心,并且依赖于规则编译器的内部。建议采用我们为/csp/samples CSP页面所采用的方法,在那里我们创建了isc:SAMPLE规则并将其包含在每个页面中。编写一个循环遍历现有页面并添加新的自定义标记的例程是很简单的。

标签:OnMatch,..,自定义,##,Rule,规则,方法,CSP
From: https://www.cnblogs.com/yaoxin521123/p/16905393.html

相关文章

  • ZABBIX开发自定义进程关键字监控
    脚本内容:#!/bin/sh####################################################Usedtomonitorthenumberofprocesskeywords#scriptbyshell#writedbyDeliver#20......
  • CSP-J2022
    D整活导致\(400\)变\(390\)哭。A.乘方其实枚举就能过,特判\(a=1\)就行了。但是考场上看这题太像快速幂了就码了个快速幂。普通的快速幂:(longlong)tot=1;whi......
  • vue自定义input组件(一)
    其实,开发一个自定义input,难度上还好,但是比较繁琐。因为input有很多状态。首先明确一下需求:需求是我用这个自定义输入框当我配置他的输入类型是什么(比如邮箱)之后我......
  • 自定义IE表达式使用.tld文件减少jsp文件中的java代码时出现的错误(可运行)cvc-id.3
    tld类型的文件产生错误如下:但是不影响运行。只需要如下:将j--->J就行。原因知晓,若有大佬知晓,欢迎留言。本人看到后,必将改正 ......
  • java自定义异常
    package异常和断言;publicclass自定义异常{publicstaticvoidmain(String[]args){try{//抛出自定义异常,fd为异常信息thrownewd("fd");}//捕捉自定义异常catch(de......
  • 自定义StringByteLength
    usingHKElectric.ESafety.Utilities;usingSystem.ComponentModel.DataAnnotations;namespaceHKElectric.ESafety.WebAPI{publicclassStringByteLengthAttri......
  • 自定义django admin Action
    https://blog.csdn.net/anbuqi/article/details/100810993 自定义djangoadminAction 文章目录自定义djangoadminAction简介Adminactions简介编写Admin......
  • 第五十章 开发自定义标签 - 使用Rule类
    第五十章开发自定义标签-使用Rule类使用Rule类规则编译器为每个被编译的规则定义生成一个类。匹配规则时执行的正是这段代码。这意味着规则可以更强大可以直接将......
  • <原文转载> 自定义博客园博客页面标签页的icon图标
    有没有发现大多数的博客园标签右上角都是一个小矿工,千篇一律没有什么特色,想不想设置一个像我一样的个性化icon图标呢?按照以下四步你也可以实现自定义标签图标。FromTo......
  • 在WPF中使用Prism弹出自定义窗体样式的对话框
    摘要在Prism中弹出一个对话框,默认是一个Windows默认样式的窗口,会与自己所开发的项目完全不搭配,例如下面这样子如果为了迎合软件主体风格,可以做出类似这样效果其实原理......