У меня есть элемент управления «Повторить», в котором есть поле редактирования, в котором передано значение по умолчанию. Для удаления этой строки есть кнопка «Удалить».
просто для теста я использовал вычисляемое поле вместе с полем редактирования. Вычисляемое поле также получает то же значение, что и поле редактирования. Теперь и вычисляемое поле, и поле редактирования имеют одинаковое значение. Когда я случайно нажимаю кнопку «Удалить», оно удаляется, но правильно вычисляемые поля обновляются только при контроле повторения, где бы они ни были удалены,
В случае поля редактирования оно показывает, что последняя запись исчезает. Итак, проблема в том, что значение в поле редактирования не обновляется, как в вычисляемом поле. Я выполнил тест, написав следующий код.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1" formName="testing">
</xp:dominoDocument>
</xp:this.data>
<xp:inputText id="inputText1" multipleSeparator=",">
<xp:this.defaultValue><![CDATA[#{javascript:var v:java.util.Vector = new java.util.Vector();
v.add('1');v.add('2');v.add('3');v.add('4');v.add('5');v.add('6');
return v;}]]></xp:this.defaultValue>
</xp:inputText>
<xp:br></xp:br>
<xp:repeat id="repeat1" rows="30" var="r" indexVar="i" first="0">
<xp:this.value><![CDATA[#{javascript:return getComponent("inputText1").getValue();}]]></xp:this.value>
<xp:br></xp:br>
<xp:div style="text-align:center">
<xp:label value="#{javascript:r}" id="label1"
style="text-align:center">
</xp:label>
<xp:button value="Delete" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:var v:java.util.Vector = getComponent("inputText1").getValue();
if(v != null){
var sdtString = getComponent("inputText2").getValue();
if(v.contains(sdtString))
v.remove(sdtString);
};}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:inputText id="inputText2">
<xp:this.defaultValue><![CDATA[#{javascript:getComponent("label1").getValue();}]]></xp:this.defaultValue>
</xp:inputText>
</xp:div>
<xp:br></xp:br>
</xp:repeat>
</xp:view>
Это пример кода для тестирования, чтобы точно определить проблему.
Редактировать 1: Реальный сценарий
У нас есть приложение для выбора нескольких дат для встречи, и, следовательно, используя свободное время для заметок, мы отмечаем несколько дат, а затем пользователям разрешается редактировать/удалять их в другом окне. Поскольку было невозможно/достаточно осуществимо сохранить все поля в SSJS, мы скорее предпочли привязать каждое поле к источнику данных под управлением повторения, используя настраиваемые свойства пользовательского элемента управления (надеюсь, я имею какой-то смысл). Каждое поле отображается, как указал @chintan, следующим образом:
dataSource[compositeData.to]
Как описано в первой части вопроса, поля не обновляются, поскольку мы устанавливаем для них значения по умолчанию. Однако, основываясь на предложении, мы попытались установить поле с помощью библиотеки сценариев, которая работает хорошо, однако может показаться глупой, но она искажает поле даты. Когда мы устанавливаем значение, используя следующее:
var d:java.util.Date = new java.util.Date(compositeData.selectedDate);
getComponent("from").setValue(d);
Он смешивает поля месяца, даты и года и показывает совершенно другое значение (тот же код хорошо работает, когда он используется в качестве значения по умолчанию).
Надеюсь, это имеет смысл.
Любое решение может быть оценено.