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

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

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

相关文章
|
前端开发 JavaScript 编译器
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
|
前端开发 程序员 Go
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
|
SQL 存储 编译器
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
|
存储 Go
第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法
第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法
|
算法 Go Python
CSP 202203-2 出行计划 python 差分算法
CSP 202203-2 出行计划 python 差分算法
CSP 202203-2 出行计划 python 差分算法
|
人工智能 Go API
CSP 202104-4 校门外的树 python 动态规划DP + 约数优化
CSP 202104-4 校门外的树 python 动态规划DP + 约数优化
CSP 202104-4 校门外的树 python 动态规划DP + 约数优化
|
算法 Go Python
CSP 201703-4 地铁修建 python 最小生成树,并查集
CSP 201703-4 地铁修建 python 最小生成树,并查集
CSP 201703-4 地铁修建 python 最小生成树,并查集
|
Go Python
CSP 202006-2 稀疏矩阵 python 模拟
CSP 202006-2 稀疏矩阵 python 模拟
CSP 202006-2 稀疏矩阵 python 模拟
|
Go Python
CSP 201909-2 小明种苹果(续) python 暴力
CSP 201909-2 小明种苹果(续) python 暴力
CSP 201909-2 小明种苹果(续) python 暴力
|
测试技术 Go Python
CSP 202009-2 风险人群筛查 python 暴力
CSP 202009-2 风险人群筛查 python 暴力
CSP 202009-2 风险人群筛查 python 暴力