2016-06-07 8 views
1

Ich möchte typeAhead-Funktionalität in einer inputBox verwenden. Werte sollten nur die erste kategorisierte Spalte (Spalte [0]) erhalten; Weil ich so viele Dokumente zum selben Kunden habe. Ich brauche nur Kundennamen als einzigartig. Hier finden Sie, was ich bisher versucht habe. In dieser Ansicht wird nur die erste Spalte kategorisiert. Andere sind nicht. Ich glaube, ich etwas vermissen :(Abrufen von Werten aus der ersten kategorisierten Ansichtsspalte in typeAhead in XPages

<xp:inputText id="inpCustomer" value="#{document1.CustomerName}"> 
<xp:typeAhead mode="partial" minChars="2" ignoreCase="true" var="lupkey" valueMarkup="true" id="typeAhead1"> 
           <xp:this.valueList><![CDATA[#{javascript:try 
    { 
     var procedureName = "fonck1"; 
     var searchOutput:Array = []; 
     var v:NotesView = database.getView("(ctgViewName)"); 
     var nav:NotesViewNavigator = v.createViewNavFromCategory(lupkey); 
     var viewEnt:NotesViewEntry = nav.getFirstDocument(); 
     var tmp:NotesViewEntry; 

     while (viewEnt !== null) 
     { 
      searchOutput.push(entry.getColumnValues()[0]); 
      tmp = viewEnt; 
      viewEnt = nav.getNextCategory(); 
      tmp.recycle(); 
     } 

     var result ="<ul><li><span class='informal'></span></li>"; 
     var limit = Math.min(hits,200); 

     for (j=0; j<limit; j++) 
     { 
      var name = searchOutput[j].toString(); 
      var start = name.indexOfIgnoreCase(lupkey) 
      var stop = start + lupkey.length; 
      name = name.insert("</b>",stop).insert("<b>",start); 
      result += "<li>" + name + "</li>"; 
     } 
     result += "</ul>"; 
     return result; 
    } 
    catch(e) 
    { 
     print(e.toString()); 
     throw(e); 
    }}]]></xp:this.valueList> 
          </xp:typeAhead> 
          <xp:this.attrs> 
           <xp:attr name="placeholder" value="Please enter customer name..." /> 
          </xp:this.attrs> 

        </xp:inputText> 

Antwort

1

searchOutput Array nur die Namen reduzieren, die mit den eingegebenen Zeichen beginnen

starten Ansicht Navigator auf den ersten Auftreten eines solchen Namens.

var v:NotesView = database.getView("(ctgViewName)"); 
var viewEnt:NotesViewEntry = v.getEntryByKey(lupkey, false) 
var nav:NotesViewNavigator = v.createViewNavFrom(viewEnt); 

Keine Namen mehr in searchOutput array eingeben, wenn der Name anders als lupkey beginnt
Ersetzen Sie Ihre erste Zeile in while mit:

var name:String = entry.getColumnValues()[0]; 
if (!name.startsWith(lupkey)) { 
    break; 
}  
searchOutput.push(name);