js css html

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

2022-11-18  本文已影响0人  Cache技术分享

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

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

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规则并将其包含在每个页面中。编写一个循环遍历现有页面并添加新的自定义标记的例程是很简单的。

上一篇下一篇

猜你喜欢

热点阅读