第四十七章 开发自定义标签 - 服务器文档对象模型
当CSP编译器处理CSP文档时,它首先查找与规则匹配相关的所有标记。
当编译器扫描文档时,它会创建一个与CSP文档中包含的标记结构匹配的对象树。
这个树被称为服务器端文档对象模型,它直接类似于显示HTML页面时浏览器中可用的文档对象模型。
服务器端文档对象模型由类%CSP.AbstractAtom 的子类的实例组成,表示一个HTML文档的单元。一个HTML文档由两种类型的ATOM对象组成:Rule和TextAtom,每种对象都由它们各自的类表示:%CSP.Rule,%CSP.TextAtom。元素由%CSP.Rule的子类的实例表示,它表示一个HTML标记、其属性值的集合、其内部的HTML以及它可能包含的任何内部标记的集合。TextAtom表示不是元素的任何内容。为了提高效率,CSP编译器只为规则匹配中涉及的标记创建Element对象;其余的(例如,和标记)包含在TextAtom对象中。
例如,假设标签有一个规则,下面的CSP文档:
<html>
<body>
Hello!
<MYTAG MSG="Welcome">
body>
html>
构造以下服务器端文档对象:
服务器端文档对象模型只在页面编译期间创建;
它在运行时不存在(同样是为了提高效率)。
这就是为什么操作可能包含在编译时执行的表达式和代码的主要原因:以利用服务器端文档对象模型。
在CSP编译器构建了文档对象模型之后whatsapp web,它通过访问树中的对象(深度优先)并触发与每个 %CSP.Rul相关联的规则来处理文档。并将结果呈现为可执行代码。根据定义,%CSP.TextAtom 对象没有规则whatsapp网页版,因此它们直接呈现在可执行代码中。
访问规则属性值
执行规则时,对%CSP的引用。与之关联的规则对象可通过当前对象使用。
例如whatsapp登录,假设想要定义一个自定义标记,该标记使用粗体斜体文本显示由VALUE属性指定的消息:
<MESSAGE VALUE="Yo!">
对此的规则定义可能如下所示:
<csr:rule name="MESSAGE" match="MESSAGE" empty>
<csr:action>
<B><I>##(..GetAttribute("VALUE"))##I>B>
csr:action>
csr:rule>
每当遇到标记时,就会触发消息规则(即调用RenderStartTag)。
写出< B >和< I >标签。写出标记对象的值关闭< B >和< I >标记。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



