Domino 9 und frühere Versionen > ND8: Entwicklung - XPages
expandAll löscht Selektion
buzzy666:
Hi zusammen,
ich habe eine kategorisierte Ansicht (in einer CustomControl, die via einem Dialog angezeigt wird), die zweite Spalte enthält eine Checkbox zum auswählen von Dokumenten.
Wenn ich nun ein Dok anhake und eine Kategorie auf oder zu klappe, verschwindet der Haken wieder.
Das gleiche passiert natürlich auch, wenn ich das via Button mache.
Code:
var viewPanel = getComponent("viewPanel1");
var model = viewPanel.getDataModel();
var container = model.getDominoViewDataContainer();
container.expandAll()
Kann ich das irgendwie unterdrücken/umgehen?
Danke & Gruß,
Buzzy
Sven Hasselbach:
Hier ein Lösungsvorschlag:
--- Code: ---<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:viewPanel rows="30" id="viewPanel1" >
<xp:this.facets>
<xp:pager partialRefresh="true" layout="Previous Group Next"
xp:key="footerPager" id="pager1">
</xp:pager>
<xp:scriptBlock id="scriptBlockViewPanel" xp:key="south">
<xp:this.value>
<![CDATA[
var data = new Array();
#{javascript:
var viewPanel = getComponent("viewPanel1");
var vPanelId = getClientId( "viewPanel1" );
var m:java.util.Map = facesContext.getExternalContext().getRequestParameterMap();
var it:java.util.Iterator = m.keySet().iterator();
var data = new java.util.Vector();
while( it.hasNext() ){
var key = it.next();
if( key.toString().indexOf( vPanelId ) != (-1) ){
data.push( m.get(key) );
}
}
var jsCode = "";
for( i=0; i< data.size(); i++){
jsCode += 'data["' + data.get(i) + '"]="' + data.get(i) + '";\n'
}
return jsCode
}
dojo.query(".xspCheckBoxViewColumn").forEach( function(node) {
if( data[node.value] )
node.checked = true;
})]]>
</xp:this.value>
</xp:scriptBlock>
</xp:this.facets>
<xp:this.data>
<xp:dominoView var="view1" viewName="All"></xp:dominoView>
</xp:this.data>
<xp:viewColumn columnName="Form" id="viewColumn1"
showCheckbox="true">
<xp:viewColumnHeader value="Form" id="viewColumnHeader1"></xp:viewColumnHeader>
</xp:viewColumn>
</xp:viewPanel>
</xp:view>
--- Ende Code ---
Das ganze funktioniert dadurch, das bei jeden Refresh ein CSJS-Script generiert wird, das die Selektion wieder herstellt. So bleibt di Selektion für ausgeklappte Kategorien erhalten. Für's Pagern müsste die Selektion im viewScope zwischengespeichert werden.
buzzy666:
Ich erstarre vor Ehrfurcht :-O
Wenn ich noch so unverschämt sein dürfte zu fragen, ob das auch auf eine Selektion anpassbar ist, die zugeklappt wird? Dann verschwindet der Haken nämlich auch - nur wenn die Kategorie offen bleibt, bleibt auch der Haken erhalten.
Besten Dank schon mal,
Buzzy
Sven Hasselbach:
Argh, hier die noch simplere Variante. Damit geht sowohl das Pagen als auch das Zu-/Aufklappen.
Einzig bei neuladen / Full refresh etc. ist die Selektion weg:
--- Code: ---<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xp_1="http://www.ibm.com/xsp/coreex">
<xp:viewPanel rows="3" id="viewPanel1">
<xp:this.facets>
<xp:pager partialRefresh="true" layout="Previous Group Next"
xp:key="footerPager" id="pager1">
</xp:pager>
<xp:scriptBlock id="scriptBlockViewPanel" xp:key="south">
<xp:this.value>
<![CDATA[
dojo.addOnLoad( function(){
dojo.query(".xspCheckBoxViewColumn").connect('onclick', function() {
selDocs[ this.id ] = this.checked;
});
rebuildDocSelection();
});
]]></xp:this.value>
</xp:scriptBlock>
</xp:this.facets>
<xp:this.data>
<xp:dominoView var="view1" viewName="All"></xp:dominoView>
</xp:this.data>
<xp:viewColumn columnName="Form" id="viewColumn1"
showCheckbox="true">
<xp:viewColumnHeader value="Form" id="viewColumnHeader1"></xp:viewColumnHeader>
</xp:viewColumn>
</xp:viewPanel>
<xp:scriptBlock id="scriptBlockViewPanelHelper">
<xp:this.value>
<![CDATA[
var selDocs = new Array();
function rebuildDocSelection(){
for( e in selDocs ){
try{
dojo.byId( e ).checked = selDocs[e];
}catch(e){}
}
}
]]>
</xp:this.value>
</xp:scriptBlock>
</xp:view>
--- Ende Code ---
Edit:
Ein Detail fehlt allerdings noch: Die Selektion zu merken ist eine Sache, die selektierten Dokumente an den Server zu senden eine andere... Das muss ich noch basteln!
buzzy666:
Klappt - aber nur, wenn ich den Code in eine CC einbaue und die dann in eine neue XPage einfüge. Wenn ich selbige CC dann in meine bestehende XPage einbaue, krieg ich die Meldung:
"Beim Aktualisieren einiger Seitenbereiche ist ein Fehler aufgetreten. rebuildDocSelection is not defined"
Anmerkung: die CC liegt in einem Dialog und wird via XSP.openDialog('#{id:inPlaceDialog1}') "aufgepoppt" - kann das damit zu tun habe?
Danke,
Buzzy
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln