Dynamiczne wiązanie w ramach powtarzalnej kontroli
W module zamówienia zakupu musimy zadać pewne pytania w zależności od metody wyboru źródła, rodzaju konkurencji i całkowitego kosztu zakupu. Te pytania prawdopodobnie zmienią się w czasie i między różnymi instancjami bazy danych.
Mam więc widok zawierający pytania, dzięki czemu mogę dynamicznie dodawać pytania do mojego XPage bez konieczności zmiany kodu. Odpowiedź na każde pytanie będzie przechowywana w polu. Tak więc dokument zawierający pytanie ma pole o nazwie FieldName, które jest używane do podania nazwy pola, która będzie używana. Niestety nie mam szczęścia, aby powiązać te dynamiczne pola z dokumentem.
<xp:this.data>
<xp:dominoView var="competitionQuestionView"
viewName="CompetitionQuestions">
</xp:dominoView>
</xp:this.data>
<xp:repeat id="repeat2" rows="30" var="rowData" style="width:700px"
value="#{competitionQuestionView}">
<xp:label id="label1">
<xp:this.value><![CDATA[#{javascript:rowData.getColumnValue("Question");}]]></xp:this.value>
</xp:label>
<xp:inputText id="inputText1">
<xp:this.rendered><![CDATA[#{javascript:rowData.getColumnValue("FieldType") == "Text Box"; }]]></xp:this.rendered>
<xp:this.value><![CDATA[#{javascript:poDoc[rowData.getColumnValue ("FieldName")];}]]></xp:this.value>
</xp:inputText>
</xp:repeat>
Próbowałem to zrobić na różne sposoby, w tym ustawić niestandardową kontrolę dynamicInputText w nazwie pola, ale bez szczęścia. Najbliższe, jakie otrzymałem, było następujące:
<xp:this.value>
<![CDATA[#{javascript:tmp = rowData.getColumnValue ("FieldName");'#{poDoc.'+tmp+'}';}]]>
</xp:this.value>
To dało mi coś takiego# {poDoc.justification}, co chciałem przekazać do „wiązania”, ale skończyło się na wyświetlaniu jako wartość tekstowa.
Próbowałem użyć $ do obliczenia wartości podczas ładowania, ale zgaduję, że nie zadziałało, ponieważ widok mój (i wiersz danych) nie jest dostępny przy ładowaniu. W końcu pojawiłby się problem, gdy chciałem użyć częściowych odświeżeń z powodu aktualizacji kryteriów, które i tak mają być wyświetlane.
Niektóre odpowiedzi na inne pytania wyglądały obiecująco, ale nie dostarczono kodu, więc nie mogłem tego zrozumieć.