JavaScript в LiveCycle - наличие объектов

JavaScript Гении,

Требуемый результат для "рекомендовать" и "авторизация", чтобы показать, если один из двух флажков установлены.

/*For Checkbox1: Fund1 */
if (this.rawValue == "1") {
  this.resolveNode("fund1").presence = "visible";
  this.resolveNode("recommend").presence = "visible";
  this.resolveNode("authorization").presence = "visible";
} else {
  this.resolveNode("fund1").presence = "hidden";
  this.resolveNode("recommend").presence = "hidden";
  this.resolveNode("authorization").presence = "hidden";
}

/*For Checkbox2 - Fund2: */
if (this.rawValue == "1") {
  this.resolveNode("fund2").presence = "visible";
  this.resolveNode("recommend").presence = "visible";
  this.resolveNode("authorization").presence = "visible";
} else {
  this.resolveNode("fund2").presence = "hidden";
  this.resolveNode("recommend").presence = "hidden";
  this.resolveNode("authorization").presence = "hidden";
}

Если я поставлю галочку, нужные объекты "рекомендовать" и "авторизация" будут видны. Если я установлю оба флажка, то сниму один, объекты "рекомендовать" и "авторизация" скрываются. Есть флажки для других фондов, которые имеют другое требование одобрения в форме.

Что вызывает проблему? Что это решает? Что является более чистым способом написания кода? Все указания приветствуются.

1 ответ

  1. Создайте Script Object для хранения всех ваших утилитных функций и дайте ему конкретное имя.
  2. Там вы должны создать функции для того, чтобы сделать объект видимым и невидимым. Это не обязательно, но такая структура уменьшит количество глупых ошибок (например, пропущены некоторые буквы в слове "видимый" и т. Д.):

    function setVisible(field){
        if (field === null) {
            //do what ever you want with an error
        }
        if (field === undefined) {
            //do what ever you want with an error
        }
        if (field instanceof Array) {
            //do what ever you want with an error
        }
        field.presence = "visible";
    }
    
    function setInvisible(field){
       if (field === null) {
            //do what ever you want with an error
        }
        if (field === undefined) {
            //do what ever you want with an error
        }
        if (field instanceof Array) {
            //do what ever you want with an error
        } 
        field.presence = "invisible";
    }
    
  3. Создайте функции для установки необходимых состояний для авторизации и рекомендованных объектов:

    function setStateAuth(){
      if(Page1.CheckBox1.rawValue == "1" || Page1.CheckBox2.rawValue == "1"){
        setVisible(Page1.Authorization);
      }else{
        setInvisible(Page1.Authorization);
      }
    }
    
    function setStateRec(){
      if(Page1.CheckBox1.rawValue == "1" || Page1.CheckBox2.rawValue == "1"){
        setVisible(Page1.Recommend);
      }else{
        setInvisible(Page1.Recommend);
      }
    }
    
  4. В событии click ваших методов вызова CheckBox1 для настройки аутентификации. и рек. государство. А также установить видимость для объекта Fund1.

    Lib.setStateAuth();
    Lib.setStateRec();
       if(this.rawValue == "1"){
          Lib.setVisible(Fund1);
       }else{
          Lib.setInvisible(Fund1);
       }
    
  5. В событии click вашего CheckBox2 вызовите методы для настройки auth. и рек. государство. А также установить видимость для объекта Fund2.

    Lib.setStateAuth();
    Lib.setStateRec();
      if(this.rawValue == "1"){
    Lib.setVisible(Fund2);
      }else{
    Lib.setInvisible(Fund2);
    }
    
  6. Обратите внимание, что работа с объектами с использованием метода resolNode не рекомендуется (из-за проблем с производительностью). Итак, если у вас есть конкретное, а не динамическое количество страниц, лучше назвать все и ссылаться на них, используя их имена. Как это сделано в образце, я сделал

Здесь вы можете получить образец PDF

Другие вопросы по тегам