2013-02-25 69 views
0

有没有办法根据文档处于编辑模式还是读取模式来动态更改样式表文件?根据文档模式动态更改样式表

我想什么做的是下面的代码添加到资源的href属性的“计算值”选项:

if(document.isEditable()){ 
    return "style_edit.css" 
} 
else{ 
    return "style_read.css" 
} 

我这个主要问题是,加载页面时,它给错误“找不到文档”。这可能是因为加载页面时,只有包含文档的视图以及用户单击文档ID时,会出现带绑定文档的自定义控件。我不知道如何将绑定到页面加载时可用的自定义控件文档。

编辑: 我试过一个try/catch块,现在xpage打开时不显示错误。但尽管自定义控件已刷新,但css文件不会更改,但我使用动态计算并且不能在加载时进行计算。

预先感谢您!

+1

您可以尝试使用xpages主题,在xpages主题中您可以使用SSJS并根据条件动态加载CSS,查看team room db主题参考 – anix 2013-02-25 14:26:55

+0

感谢您的快速回复,但目前我没有使用任何主题,我觉得这样将导致更多的变化。 – kmak 2013-02-25 15:05:27

回答

2

您可以设置资源href属性为计算。为此,请转至XPage的所有属性“基本信息>资源>样式表”。在这里,您可以使用JavaScript代码计算href属性。所以,你在XPage源代码资源会是这个样子

<xp:this.resources> 
    <xp:styleSheet> 
     <xp:this.href><![CDATA[#{javascript:if (document.isEditable()) { 
    return "style_edit.css"; 
} else { 
    return "style_read.css"; 
}}]]></xp:this.href> 
    </xp:styleSheet> 
</xp:this.resources> 

要访问自定义控件数据源可以使用全局变量currentDocument代替document

+0

是的,这是我想要做的,但在页面加载时,它给出错误“currentDocument not found”。这可能是因为加载页面时,只有包含文档的视图以及用户单击文档ID时,会出现带绑定文档的自定义控件。我不知道如何制作绑定到页面加载的自定义控件文档 – kmak 2013-02-25 15:03:52

+0

@kmak:你是否尝试用try/catch-block来包围SSJS代码? – 2013-02-25 15:26:51

+0

@kmak:你能否澄清/编辑你的问题,因为你在问 - 我想要做的是将下面的代码添加到资源href ..._的“计算值”选项中您? – Naveen 2013-02-25 15:55:43

2

为什么强制用户下载版上单独的文件时,可以计算出的styleClass只需添加一些板/组件:

<xp:panel> 
     <xp:this.styleClass><![CDATA[#{javascript:return document.isEditable()?"docEditMode":"docReadMode";}]]></xp:this.styleClass> 
</xp:panel> 

,并用它作为内部的style.css选择

+1

+1这是更好的主意,保持单独的CSS与适当的选择器来处理文档模式 – 2013-02-25 18:00:20

+1

是的,这是我现在如何完成它。你可能是对的。让我想到单独的css文件的原因是,如果另一个程序员想进行更改,他/她将不得不更改每个面板或组件。但是,如果我理解的很好,你就是说这比使用单独的文件更可取。 – kmak 2013-02-26 09:13:53