Xpages将事件附加到数据视图中寻呼机的部分刷新



在上一篇文章中,我询问了如何将引导程序类添加到数据视图中。答案是将类添加到脚本块中的"table.dataview"中。创建表后,应用类,一切都很好。

但当我使用寻呼机时,格式就会消失。我在寻呼机上使用部分刷新只刷新数据表,但这样做意味着引导类不会应用于表。

我认为我需要添加一个事件处理程序,它将附加到dataView的刷新操作以添加类。但是,我无法使事件处理程序工作。

我的事件处理程序代码如下。

<xp:eventHandler refreshMode="partial" submit="true"
            id="applyCSS" refreshId="dataView1" event="parialRefresh"
            value="what" loaded="false">
            <xp:this.binding><![CDATA[#{javascript:"pager1"}]]></xp:this.binding>
            <xp:this.action><![CDATA[#{javascript:("table.dataview").addClass("table-striped table-hover table-bordered table-condensed")}]]></xp:this.action>
        </xp:eventHandler>

奥利弗,rendered=false只是一个拼写错误——我正在测试一些东西,需要暂时抑制它。

Oliver和Paul,

昨天晚上,我能够部分恢复工作。

我偶然发现了马克·罗登的这篇文章,它解释了如何做到这一点。有两种不同的方法来实现这一点,一种是少一种是高效一种。我使用的代码如下。

<xp:scriptBlock id="scriptBlock3">
            <xp:this.value><![CDATA[$('.dataView1PanelWrapper').on("DOMNodeInserted", function(){
    $("table.dataview").addClass("table-striped table-hover table-bordered table-condensed")
})]]></xp:this.value>
        </xp:scriptBlock>

然而,Xpages中几乎总是有一个。然而,我在视图中有一些可排序的列,点击排序会带来同样的问题!我把课堂作业弄丢了!

所以现在我也必须拦截那个事件,对吧?

担心这会在哪里结束。我不喜欢DOM操作的想法,只有在我也有的时候才想这么做。

我开始使用一个简单的视图。它工作得很好,但由于某种原因,寻呼机的间距被打乱了。我发现,通过将寻呼机从视图中移出,我可以解决对齐问题。我认为只使用视图会更好,因为我可以直接分配类,而不必进行所有这些操作。然而,知道如何在未来做到这一点是非常好的。

这是你的建议吗?

==================================================我尝试过Paul Withers使用输出脚本的建议。这适用于初始页面加载,但不适用于对数据视图的任何其他更改——当寻呼机启动或排序时。我很接近,但还没有抽雪茄。有什么建议吗?

<xp:scriptBlock id="scriptBlock5" loaded="false">
        <xp:this.value><![CDATA[dojo.require("dojo.behavior");
Behavior = {
    ".dataview": {
        found: function(node) {
            dojo.addClass(node,".table-striped table-hover table-bordered table-condensed");
            //node.addClass("table-striped table-hover table-bordered table-condensed");
        }
    }
}
dojo.ready(function() {
    dojo.behavior.add(Behavior);
    dojo.behavior.apply();
});
//Make sure that future pagers are also straightened out
dojo.subscribe("partialrefresh-complete", null, function(method, form, refreshId) {
    dojo.behavior.apply();
});]]></xp:this.value>
    </xp:scriptBlock>

在xe:dataView的一个方面内移动您现有的xp:scriptBlock和工作代码。然后,样式将应用于初始加载和所有部分刷新。

您应该调用CSJS的东西来在事件处理程序的onComplete属性中添加类-很难找到,只需在源代码或大纲中突出显示事件处理程序对象,然后打开"All properties"来找到"onComplete"属性。此事件允许调用CSJS。

BTW:为什么加载的属性=false?我们永远不会渲染该事件。

dojo.behaviordojo.readydojo.subscribe应该允许您管理它。dojo.behavior允许您为将通过Dojo查询检索的特定元素集合定义特定行为。dojo.ready将(我相信)在页面最初加载时运行代码,dojo.subscribe("partialrefresh-complete", null, function(method, form, refreshId) {...}将在部分刷新后运行代码。

以下是我用于将DataView的类别列图像转换为Font Awesome图标的示例代码,因此Behavior = {...}位需要修改。

Behavior = {
    // Convert xp:pagers to Bootstrap
    ".catColumn a img": {
        found: function(img_node) {
            var imgSrc = dojo.getNodeProp(img_node, "alt").toLowerCase();
            if (imgSrc.indexOf("collapse") >= 0) {
                dojo.place('<i class="fa fa-minus-square"></i>&nbsp;', img_node, 'replace');
            } else {
                dojo.place('<i class="fa fa-plus-square"></i>&nbsp;', img_node, 'replace');
            }
        }
    }
}
dojo.ready(function() {
    dojo.behavior.add(Behavior);
    dojo.behavior.apply();
});
//Make sure that future pagers are also straightened out
dojo.subscribe("partialrefresh-complete", null, function(method, form, refreshId) {
    dojo.behavior.apply();
});

最新更新