第五十一章 开发自定义标签 - 使用%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
方法。我们不建议覆盖系统规则。
覆盖系统提供的规则(尤其是html
、head
和body)
需要非常小心,并且依赖于规则编译器的内部。建议采用我们为/csp/samples CSP
页面所采用的方法,在那里我们创建了isc:SAMPLE
规则并将其包含在每个页面中。编写一个循环遍历现有页面并添加新的自定义标记的例程是很简单的。
网友评论