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


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

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

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

      • GetAttribute

      • GQuoteAttribute

      • GGetAttributesOrdered

      • GIsDefined

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

      • InnerText

      • AddChildElement

      • SetAttribute

      • OnMatch

    GetAttribute Method

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

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

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

        Set tablename=##this.GetAttribute("NAME")
        Set maxcols=##this.GetAttribute("COLS")
        Set maxrows=##this.GetAttribute("ROWS")
    
    • 1
    • 2
    • 3

    QuoteAttribute Method

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

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

    以下示例摘自 标记,它包含四个属性:一个类型为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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    GetAttributesOrdered Method

    GetAttributesOrdered(ByRef paramsordered)
    
    • 1

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

    IsDefined Method

    IsDefined(name As %String)
    
    • 1

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

     If ..IsDefined("CAPTION") {
         Do ..WriteServer(setCmd
                          _ " nvp(""CAPTION"") = "
                          _ ..QuoteAttribute("CAPTION"))
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    InnerText Method

    InnerText()
    
    • 1

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

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

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

    AddChildElement Method

    AddChildElement(atom As %CSP.AbstractAtom)
    
    • 1

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

    SetAttribute Method

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

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

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

        If ('..IsDefined("NAME")) {
            Do ..SetAttribute("NAME","FORM")
        }
    
    • 1
    • 2
    • 3

    OnMatch Method

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    php数据表操作
    Linux Ubuntu命令行快速配置C++开发环境
    DevEco中被忽略的实用功能
    CSS动画-transition/animation
    邮件|gitpushgithub报错|Lombok注解
    【产线故障】线上接口请求过慢如何排查?
    【面试题精讲】构造方法有哪些特点?是否可被 override?
    vue-router(路由)详细
    传输层——UDP协议、TCP协议
    【HTTP协议——八股文(下)篇】
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/127932174