xpages extlib breadcrumbs:如何让函数生成正确的链接

时间:2015-02-18 21:21:15

标签: xpages xpages-ssjs xpages-extlib

我的文档有3个字段,可用于“分类”文档。对于面包屑,我希望显示这些字段,链接将打开该“类别”级别的视图(在视图中打开单个类别)。

现在所有“类别”字段在文档中都不是必需的。我以为我会编写一个SSJS函数来返回控制面包屑的必要对象,但是我很难搞清楚如何让链接真正起作用。

到目前为止,我的功能看起来像这样:

function getBreadCrumbs(doc:NotesDocument) {
    var breadCrumbs=[];

        //always add home as first level
    var thisCrumb = {label:"Home", page:"/home"};
    breadCrumbs.push(thisCrumb);

    if(doc.hasItem("CategoryV2")) {
        var label:String = doc.getItemValueString('CategoryV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/home"};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("SectionNameV2")) {
        var label:String = doc.getItemValueString('SectionNameV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/home"};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("SubSectionNameV2")) {
        var label:String = doc.getItemValueString('SubSectionNameV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/home"};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("Subject")) {
        var label:String = doc.getItemValueString('Subject');
        if(label!="") {
            var thisCrumb = {label:label};
            breadCrumbs.push(thisCrumb);
        }
    }

    return breadCrumbs;
}

让链接实际工作需要什么:“页面”对象是否需要以其他名称命名?

感谢您的帮助/提示

1 个答案:

答案 0 :(得分:1)

傻傻的我......

在breadcrumbs控制peoperties中,我忘了指定Href属性等于crumb.page ...注意.xsp也是实际工作链接所必需的。

所以,有效的功能如下:

function getBreadCrumbs(doc:NotesDocument) {
    var breadCrumbs=[];

        //always add home as first level
    var thisCrumb = {label:"Home", page:"/home.xsp"};
    breadCrumbs.push(thisCrumb);

    if(doc.hasItem("CategoryV2")) {
        var label:String = doc.getItemValueString('CategoryV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/home.xsp?category="+label};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("SectionNameV2")) {
        var label:String = doc.getItemValueString('SectionNameV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/allDocs.xsp&section="+label};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("SubSectionNameV2")) {
        var label:String = doc.getItemValueString('SubSectionNameV2');
        if(label!="") {
            var thisCrumb = {label:label, page:"/allDocs.xsp?subsection="+label};
            breadCrumbs.push(thisCrumb);
        }
    }

    if(doc.hasItem("Subject")) {
        var label:String = doc.getItemValueString('Subject');
        if(label!="") {
            var thisCrumb = {label:label};
            breadCrumbs.push(thisCrumb);
        }
    }

    return breadCrumbs;
}

自定义控件中的代码现在是:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">

    <xe:breadCrumbs id="breadCrumbs1">
        <xe:this.treeNodes>
            <xe:repeatTreeNode indexVar="1" var="crumb">
                <xe:this.children>
                    <xe:basicLeafNode label="#{crumb.label}" href="#{javascript:crumb.page}">
                    </xe:basicLeafNode>
                </xe:this.children>
                <xe:this.value><![CDATA[#{javascript:getBreadCrumbs(document1.getDocument());}]]></xe:this.value>
            </xe:repeatTreeNode>
        </xe:this.treeNodes>
    </xe:breadCrumbs>
</xp:view>

我错过的是设置&#34; Href&#34; basicLeaNode的值来自SSJS函数。我有标签,但是当我在SSJS函数中添加代码来构建fref时,我完全忘了修改自定义控件来添加这个属性......

这是一个loooooooooooooooon日......

就像一个FYI一样,allDocs.xsp页面显示一个视图,我使用URL参数过滤视图。