oxygenxml - 在面包屑呈现中包含特定属性或子元素文本
问题描述
在作者中,它显示了一个面包屑,我知道您可以将其显示修改为其他一些静态文本或本地化,但我想知道是否可以动态显示一个属性,或者动态执行一些其他特定于上下文的 xpath。
作为测试,我可以使用本地化编辑器变量更改面包屑${i18n()}
。
cc_config.xml
<elementRenderings platform="webapp">
<render element="num" as="${i18n(test)}" annotation="${i18n(test)}"/>
translation-cc.xml
<key value="test">
<comment></comment>
<val lang="en_US">Year</val>
但是,尝试任何其他变量,甚至是“更静态”的变量,例如${cf}
或${tp}
简单地按字面呈现变量文本,而不是对其进行评估。
cc_config.xml
<elementRenderings platform="webapp">
<render element="paragraph" as="${xpath_eval(./@eId)}" annotation="${xpath_eval(./@eId)}"/>
<render element="p" as="${tp}" annotation="${tp}"/>
如您所见,我尝试使用annotation
; 但这些工具提示也只是按字面意思显示变量。
我还摆弄并尝试了一堆 xpath 的东西,比如@eId
/ .@eId
/ /@eId
,但我认为在使用内容完成配置文件方面存在一些关于编辑器变量的限制。
那么想法是正确的,但我做错了什么,还是不是正确的方式,但还有其他方式可以影响面包屑?也许与架构?
解决方案
文件中的元素显示名称cc_config.xml
不支持大多数编辑器变量。其中大多数,如${cf}
(当前文件)和${tp}
(总页数)在渲染元素名称时使用没有意义。
这xpath_eval
是有道理的 - 元素的显示名称可能取决于它的属性(例如@id
属性),它在文档中的索引(例如“第 3 节”)等。我们为此案例注册了一个功能请求,我添加了您的投票给它。
作为部分解决方法,您可以使用 JS API 根据元素原始名称及其属性计算元素的显示名称:
goog.events.listen(workspace, sync.api.Workspace.EventType.BEFORE_EDITOR_LOADED, function(e) {
e.options.elementNameEnhancer = function(elemName, attrs) {
var displayString = elemName;
var attr = attrs['id'];
if (attr) {
displayString += ' (#' + attr.attributeValue + ')';
}
return displayString;
};
});
推荐阅读
- android - Obufscation,在 Android 中使用 build.gradle 缩小
- ios - 定位 UIButton 的内部图像
- python - 创建包含其他列的列
- python - 使用 Python 解码来自传感器的有效载荷
- vb.net - 如何将字符串转换为另一种方式并检测换行符并写入 vb .net 中的文本文件
- javascript - 无法在javascript的类方法中访问类实例变量
- spring-boot - 用于匿名或经过身份验证的用户的 Spring Security Rest 控制器方法
- flutter - 即使快照有数据,数据也返回 Null,Flutter
- node.js - 由于 nginx 反向代理,无法获取用户 ip
- c++ - 尽管移动,但 C++11/Qt 内存泄漏