Ignore the messy code which needs to be tidied up when everything is working, but this is my custom control with repeat.....
Forever getting errors like
HTTP JVM: Error with unique array: Error calling method 'infexOf(number)' on an object of type 'Array [JavaScript Object]'
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.data>
<xp:dominoView var="view1">
<xp:this.databaseName><![CDATA[#{javascript:@Name("[CN]",@Subset(@DbName(),1))+"!!protocasebook.nsf"}]]></xp:this.databaseName>
<xp:this.viewName><![CDATA[#{javascript:"(EVIndicationsByObligorNo)"}]]></xp:this.viewName>
</xp:dominoView>
</xp:this.data>
<xp:div styleClass="span-20 last">
<xp:div styleClass="maincontentdiv">
<xp:repeat id="repeat1" rows="10" var="stateData">
<xp:this.value><![CDATA[#{javascript:try{
//Get db and view
var dbEnq:NotesDatabase = session.getDatabase("","protocasebook.nsf");
var vw:NotesView = dbEnq.getView("(EVIndicationsByObligorNo)");
//build doc collection of indications related to this doc
var dc:NotesDocumentCollection = vw.getAllDocumentsByKey(viewScope.obligorNo);
print("Obligor No: "+ viewScope.obligorNo);
var doc:NotesDocument = dc.getFirstDocument();
var array = new Array;
while (doc != null) {
//build an array
array.push(doc.getItemValue("viewFilter"))
print("Value: " + doc.getItemValue("viewFilter"));
var tmpdoc:NotesDocument = dc.getNextDocument();
doc.recycle();
doc = tmpdoc;
}
//var text;
for (i = 0; i < array.length; i++) {
var a = array.infexOf(i);
if (a <0){
print("Less: " + a);
}else{
print("More: " + a);
}
}
//text += array[i];
// print ("T: " + array[i]);
//}
//var ret = [array[0]];
// for (var i = 1; i < array.length; i++) { // start loop at 1 as element 0 can never be a duplicate
// if (array[i-1] !== array[i]) {
// ret.push(array[i]);
// }
//}
// print("RET: " + ret);
//var results = @Unique(array);
//print("Results: "+ results);
//print ("Results: " + session.evaluate("@Unique").results(0));
//return session.evaluate("@Unique").results;
//return results;
//print("TYPE: " + typeof results);
//var arArray = new Array;
//arArray.push(results)
//for(var i = 1; i <= @Count(results); i++) {
//return(@Element(results, i));
//}
// print("Unique: " + @Unique(temp));
}catch(e){
print ("Error with unique array: " + (e));
}}]]></xp:this.value>
<xp:panel>
<xp:button value="" id="button2"
styleClass="btn btn-success btn-sm">
<span class="glyphicon glyphicon-plus"
aria-hidden="true">
</span>
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="DetailOuter">
<xp:this.action><![CDATA[#{javascript:viewScope.put("showDetail", true)}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button value="" id="button3"
styleClass="btn btn-danger btn-sm">
<span class="glyphicon glyphicon-minus"
aria-hidden="true">
</span>
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="DetailOuter">
<xp:this.action><![CDATA[#{javascript:viewScope.put("showDetail", false)}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
 
<xp:inputText id="inputText7"
styleClass="col-sm-3 control-label"
value="#{javascript:stateData}">
</xp:inputText>
 
<xp:panel id="DetailOuter">
<xp:table styleClass="table table-bordered">
<xp:repeat id="repeat2" rows="100"
var="nameData">
<xp:this.value><![CDATA[#{javascript:// You could either get the value using getComponent
//view1.getAllEntriesByKey(getComponent("inputText7").getValue());
// Or use the var name of the first repeat
view1.getAllEntriesByKey(viewScope.obligorNo);
}]]></xp:this.value>
<xp:this.rendered><![CDATA[#{javascript:viewScope.get("showDetail")}]]></xp:this.rendered>
<xp:panel>
<xp:tr>
<xp:td>
<xp:inputText id="name">
<xp:this.value><![CDATA[#{javascript:nameData.getColumnValues()[4]}]]></xp:this.value>
</xp:inputText>
</xp:td>
<xp:td>
<xp:inputText id="address">
<xp:this.value><![CDATA[#{javascript:nameData.getColumnValues()[5]}]]></xp:this.value>
</xp:inputText>
</xp:td>
<xp:td>
<xp:inputText id="city">
<xp:this.value><![CDATA[#{javascript:nameData.getColumnValues()[6]}]]></xp:this.value>
</xp:inputText>
</xp:td>
<xp:td>
<xp:inputText id="state">
<xp:this.value><![CDATA[#{javascript:nameData.getColumnValues()[7]}]]></xp:this.value>
</xp:inputText>
</xp:td>
<xp:td>
<xp:inputText id="zip">
<xp:this.value><![CDATA[#{javascript:nameData.getColumnValues()[8]}]]></xp:this.value>
<xp:this.converter>
<xp:convertNumber
type="number">
</xp:convertNumber>
</xp:this.converter>
</xp:inputText>
</xp:td>
</xp:tr>
</xp:panel>
</xp:repeat>
</xp:table>
</xp:panel>
</xp:panel>
</xp:repeat>
</xp:div></xp:div>
</xp:view>