2016-12-16 4 views
0

enter image description hereXpages - Fügen Sie eine Flagge über durch Klicken auf eine Schaltfläche auf einem Wiederholungs Artikel

Die Karten oben über eine Wiederholung bevölkert und die Ansicht kategorisiert nicht. Was ich jetzt hinzufügen möchte, ist die Möglichkeit, eine Löschflagge an irgendeine Karte in beliebiger Reihenfolge anzuhängen.

Unten ist der Code für die Löschtaste:

<xp:link> 
    <span class="glyphicon glyphicon-trash pull-right text-primary"></span> 
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
     <xp:this.action><xp:actionGroup><xp:executeScript> 
      <xp:this.script><![CDATA[#{javascript: 
     var name=getComponent("FullName").getValue(); 
     var vec:NotesView = database.getView("SupportTeam"); 
     var docEv:NotesDocument = vec.getFirstDocument(); 
     if (name == docEv.getItemValueString("FullName")) { 
      docEv.replaceItemValue("SupportAction", "Delete");   
      docEv.save(); 
     } 
    }]]></xp:this.script> 
              </xp:executeScript> 
             </xp:actionGroup> 
            </xp:this.action></xp:eventHandler> 
            </xp:link> 

Der obige Code funktioniert, aber die Löschtaste zweimal werden müssen geklickt für sie arbeiten, und es hat in der Reihenfolge sein, das heißt, wenn ' Test 6 'wird angeklickt und wird nicht gelöscht, da' Test 5 'im Weg ist.

Ich habe versucht, mit getdocumentbykey(), aber die Ansicht muss kategorisiert werden, die dann mehrere Einträge zeigen wird. In diesem Fall werden viele leere Karten angezeigt.

Ihre Hilfe wird geschätzt.

+1

Vielleicht zeigen Sie uns die Karte Rendercode, damit wir diese Struktur verstehen können. Wie werden die Wiederholungsobjekte aufgebaut? Werden sie in ViewScope gespeichert oder ?? – Newbs

+0

Wie @Newbs sagte, würde die Erweiterung mit dem Code aus dem "xp: repeat" und allem, was dazu gehört, wie es die Datenquelle berechnet, aufschlußreicher sein. –

Antwort

0

Wir benötigen eine Wiederholungscode, um zu sehen, jedoch aslong, wie Sie das var Eigentum Ihrer Wiederholung auf etwas festgelegt, dass dann Sie Zeilendaten zur Verfügung stellt, so könnte man so etwas verwenden:

var id = rowData.getUniversalID(); 
var docEv:NotesDocument = database.getDocumentByUNID(id); 
docEv.replaceItemValue("SupportAction", "Delete");   
docEv.save(); 
//Or to do a hard delete 
docEv.remove(true); 
0

Ich entschied mich, die Sammlung zweimal zu durchlaufen, indem ich die while-Schleife benutzte, um die Sammlung zu erhalten, und dann die for-Schleife für die Aktion, und das scheint zu funktionieren, aber ich bin mir sicher, dass es einen besseren Weg geben sollte. Unten ist der endgültige Code:

var name = getComponent("FullName").getValue(); 
var vec:NotesView = database.getView("SupportTeam"); 
var docEv:NotesDocument = vec.getFirstDocument(); 
var collection = []; 
while (docEv != null){ 
    try{ 
     var member = docEv.getItemValueString("SupportFullName"), memberLength = collection.length; 
     collection.push(member); 

     for (var i = 0; i < memberLength; i++) { 
      if(memberLength != null && name == docEv.getItemValueString("SupportFullName")){ 
       docEv.replaceItemValue("SupportAction", "Delete");   
       docEv.save(); 
      } 
     } 
    }catch(e){ 
     print("error: " + e.toString()); 
    } 

    var tmp = vec.getNextDocument(docEv); 
    docEv.recycle(); 
    docEv = tmp; 
} 

Vielen Dank für die Antwort.

Verwandte Themen