2016-12-08 12 views
1

Я пытался адаптировать валидатор от this example в портлете LR 6.2 GA6. Однако я не могу заставить его работать. Любопытно, что тег validator не работает.
Это форма Я используюLiferay 6.2 Проблемы с проверкой формы

<aui:form name="<portlet:namespace />address" action="<%=doSmthURL %>" id="fm"> 
<aui:container> 
    ... 
    <aui:row> 
     <aui:col> 
      <aui:input name="conditions1" label="text" type="checkbox" id="conditions1"> 
      </aui:input> 
     </aui:col> 
    </aui:row> 
    <aui:row> 
     <aui:col> 
      <aui:input name="conditions2" label="conditions2" type="checkbox" id="conditions2"/> 
     </aui:col> 
    </aui:row> 
</aui:container> 
<aui:button-row> 
    <aui:button type="cancel" value="Back"></aui:button> 
    <aui:button type="submit" value="Finish"></aui:button> 
</aui:button-row></aui:form> 

И это AUI: часть сценария

<aui:script> 
var rules = { 
     conditions1:{ 
      required:true 
     }, 
     conditions2:{ 
      required:true 
     } 
} 
var fieldStrings = { 
     conditions1:{ 
      required:"Bitte nimm die allgemeinen Geschäftbedingungen an" 
     }, 
     conditions2:{ 
      required:"Bitte nimm die allgemeinen Geschäftbedingungen an" 
     } 
} 
AUI().use(
     'aui-form-validator', 
     function(A) { 
      new A.FormValidator(
      { 
       boundingBox: "#fm", 
       fieldStrings: fieldStrings, 
       rules: rules, 
       showAllMessages: true 
      } 
      ) 
     } 
); 

Я не знаю, почему он не работает. Поскольку использование тега validator не делает ничего, возможно, это проблема с javascript excecution в целом.

Я надеюсь, что кто-то может мне помочь.

С наилучшими пожеланиями, JSM

+2

Я подозреваю, что атрибут boundingBox не указан правильно. Не могли бы вы попробовать добавить '# <портлет: namespace> fm' (потому что теги AUI добавили пространство имен портлетов в id/name) –

+0

Есть ли причина, по которой вы не используете тег' 'внутри' ' ? – Byran

ответ

2

К сожалению, эта документация сбивает с толку, и нуждается в обновлении.

Если вы в состоянии, я бы предложил использовать <aui:validator> внутри <aui:input>.

<aui:input name="conditions1" label="text" type="checkbox" id="conditions1"> 
    <aui:validator name="required" errorMessage="Bitte nimm die allgemeinen Geschäftbedingungen an" /> 
</aui:input> 

Этот портал позволяет обрабатывать все необходимые JS.

Если вы не можете использовать <aui:validator, я бы предложил использовать Liferay.Form для доступа к Form Validator, прилагаемому к форме. Потому что в настоящее время вы добавляете дополнительный, который может конфликтовать.

<aui:script use="liferay-form"> 
    var form = Liferay.Form.get('<portlet:namespace />fm'); 

    var oldFieldRules = form.get('fieldRules'); 

    var newFieldRules = [ 
     { 
      body: function (val, fieldNode, ruleValue) { 
       return (val !== '2'); 
      }, 
      custom: true, 
      errorMessage: 'must-not-equal-2', 
      fieldName: 'fooInput', 
      validatorName: 'custom_fooInput' 
     }, 
     { 
      fieldName: 'fooInput', 
      validatorName: 'number' 
     } 
    ]; 

    var fieldRules = oldFieldRules.concat(newFieldRules); 

    form.set('fieldRules', fieldRules); 
</aui:script>