2014-01-31 3 views
1

Сценарий: У меня было требование для моего приложения XPage, например, для поля группы флажков было 3 варианта. И было три разных таблицы содержит более 10 полей (привязанных к источнику данных) каждой таблицы. Независимо от параметров, выбранных из этого флажка, должна отображаться соответствующая таблица (для группы флажков нет значения по умолчанию, и все три таблицы были скрыты = nitially). Поскольку флажок установлен, все параметры могут быть проверены, и если какая-либо опция не отмечена, соответствующая таблица должна быть скрыта, а значения, введенные в эти поля в таблице, должны быть очищены. Это требование и его так просто и займет очень мало времени, чтобы закончить его. Но проблема здесь возникает.getComponent ("fieldName"). SetValue() Не работает

Проблема: В поле onClick() этого флажка я написал код SSJS, чтобы очистить значение множества полей в этой конкретной таблице, опция которого не установлена. Но этого не происходит.

var ckbxValue = getComponent("checkBox").getValue(); 
if([email protected](ckbxValue,"1stOption")) 
{ 
    array_1 = new Array("txtFld_1","txtFld_2","txtFld_3","txtFld_4","txtFld_5","txtFld_etc"); 
    for(d=0;d<array_1.length;d++) 
    { 
     //currentDocument.setValue(array_1[d],""); 
     getComponent(array_1[d]).setValue(""); 
    } 
} 

Когда я снимите 1-й вариант, первая таблица будет скрывать, и это будет выполняться и очистить значения поля. Но ценности не были очищены. Но тот же код работает для вычисленного текста (который не привязан), а также работает для тех полей, когда таблица видна. Я не понимаю, почему этого не происходит.

Я сделал другое обходное решение и выполнил требование на время. Я хочу знать, что происходит в то время.

Что я нашел, Первоначально было скрытое поле с привязкой, я устанавливаю значение как «AAA», нажимая кнопку. Теперь я показываю кнопку - это некоторое условие с полным обновлением, и поле отображает значение «AAA». Теперь поле видно, и я устанавливаю значение как «BBB», нажав на другую кнопку. Теперь он покажет значение как «BBB». Я прячу его сейчас и устанавливаю значение как «CCC» и снова делая поле видимым. Теперь мне нужно увидеть значение «CCC», но я вижу «BBB». Как это происходит?

Может ли кто-нибудь заставить меня понять, почему это происходит так?

Заранее спасибо.

ответ

6

Не следует за компонентом. Наилучший подход заключается в привязке компонента к переменной области действия и чтении этой переменной. Особенно с флажками, которые избавляют вас от многих неприятностей.

Рассмотрите элемент пользовательского интерфейса визуализацию, а не данные. Бизнес-логика всегда действует на данные, а не на их визуальное представление.

Сделайте снимок.

+0

Да, второе утверждение верно. Но проблема для меня связана с компонентом Editbox UI. Он ведет себя по-разному, когда мы переключаем его видимость. Не могли бы вы прояснить немного больше. – flykarthick

+2

Проблема с «видимостью» заключается в том, что на самом деле это «рендер» или нет, а не видна ли она. Поэтому, когда он вычисляет видимость/визуализируется как false, этот элемент НЕ ДОСТУПНО, а не просто скрыт. Это плохо обозначенное свойство, которое становится более очевидным в исходном коде, чем на вкладке дизайна. Возможно, было бы полезно включить код для флажка для дальнейшего устранения проблемы. –

+2

Stephan абсолютно прав: существуют компоненты для * пользователей * для взаимодействия, источники данных для * кода * для взаимодействия. Никогда не используйте 'getComponent (" id "). SetValue (" value ")' ... вместо этого используйте 'dataSource.setValue (" свойство "," значение ")' или 'someScope.put (" свойство "," значение ") '. Это сопоставляется с тем, что связывает значение компонента, например. ''. Если компонент не привязан к данным, но вам необходимо программно изменить его значение, привязать его к данным и обновить код, чтобы поговорить с этими данными ...компонент автоматически подберет новое значение. –

Смежные вопросы