我有一个包含2张图片的自定义控件:添加和删除收藏夹。
图像的onCLick事件上有一些代码,两个图像都使用SSJS函数来查看当前文档是否已经在收藏夹中,在每个图像的可见属性中。
一切正常,我需要在图像上单击两次才能看到UI中的更改。两个onClick事件都设置为FullUpdate(也尝试使用包含图像的面板进行部分更新)。
我可以将所有收藏夹逻辑移动到会话范围变量中,但我认为这应该按原样运行。我只是不明白为什么我需要点击两次,好像部分刷新没有做任何事情(虽然它是,因为我在浏览器中看到重新加载箭头!)。
可能是代码执行时间过长而且刷新没有获得更新的信息???
这是自定义控制代码:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.resources>
<xp:script src="/AppUtils.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:image url="/favorites-add.png" id="image1"
alt="Add to Favorites" title="Add to Favorites">
<xp:this.rendered><![CDATA[#{javascript:!isInFavorites(document1.getDocument().getUniversalID(), userBean.canonicalName);
}]]></xp:this.rendered>
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:addToFavorites(document1.getDocument().getUniversalID(),userBean.canonicalName);}]]></xp:this.action>
</xp:eventHandler>
</xp:image>
<xp:image url="/favorites-remove.png" id="image2"
alt="Remove from Favorites" title="Remove from Favorites">
<xp:this.rendered><![CDATA[#{javascript:isInFavorites(document1.getDocument().getUniversalID(),userBean.canonicalName);
}]]></xp:this.rendered>
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:removeFromFavorites(document1.getDocument().getUniversalID(),userBean.canonicalName);}]]></xp:this.action>
</xp:eventHandler>
</xp:image>
</xp:view>
这是SSJS:
function addToFavorites(unid, userName) {
var newDoc:NotesDocument = database.createDocument();
newDoc.appendItemValue("Form","Favorite");
newDoc.appendItemValue("UserName", userName);
newDoc.appendItemValue("DocUNID", unid);
newDoc.save();
return;
}
function removeFromFavorites(unid, userName) {
var notesView:NotesView = database.getView("(lkpFavorites)");
var keys = new java.util.Vector();
keys.addElement(userName);
keys.addElement(unid);
var coll:NotesDocumentCollection = notesView.getAllDocumentsByKey(keys, true);
if(coll.getCount()==1) {
coll.getFirstDocument().remove(true);
}
return;
}
function isInFavorites(unid, userName) {
var notesView:NotesView = database.getView("(lkpFavorites)");
var keys = new java.util.Vector();
keys.addElement(userName);
keys.addElement(unid);
var coll:NotesDocumentCollection = notesView.getAllDocumentsByKey(keys, true);
if(coll.getCount()>0) {
return true;
} else {
return false;
}
}
答案 0 :(得分:1)
我建议您在图片周围放置一个xp:链接来投射事件代码,而不是直接使用图像的偶数。
答案 1 :(得分:0)
好的,不确定那里发生了什么,但我手动编辑了自定义控件的源代码,看看我是否有Oliver建议的空的eventHandler,它开始按预期工作。我完全不确定我改变了什么:据我所知,我所做的只是在源视图中添加额外的“返回”,使其更具可读性......我想是圣诞礼物。
现在一切都很好。感谢所有人:)