0

我想知道我们如何为 Autofield 类别中的 aui:select 字段编写验证器。

这是我的代码结构:

for( loop total number of items)
{
// CREATE aui select, and aui inputs by appending the index
}

自动字段的功能没有问题。通过循环浏览我的项目集合,我可以在查看表单时创建重复条目,并且使用 liferay 提供的加号图标“创建”表单时也没有问题。

我在容器中有 aui:select 元素,它将根据 Autofield 功能进行复制。如何为此 aui:select 元素提供验证器。?

4

1 回答 1

1

假设您的表单中存在一些“模板” <aui:select>,类似于:

<aui:select id="elementIdPrefix0" name="elementIdPrefix0" label="Number" showEmptyOption='true' > <!--  options go here  --></aui:select>

在您的auto-fields中,您需要为事件提供一个on事件侦听器clone。在回调中,您<aui:select>从刚刚创建的行容器节点中查找(作为参数传递给回调)。

<script>
  AUI().use('liferay-auto-fields', 'aui-form-validator', function(A){

  //Setup rules
  var elementIdPrefix = '<portlet:namespace />elementIdPrefix',
      myRules  = {},  
      rulesRepository = {};

      rulesRepository[elementIdPrefix] = {required:true};
      myRules [elementIdPrefix + '0'] = rulesRepository[elementIdPrefix];

      //Define validator
      var validator = new A.FormValidator({
                             boundingBox: '#<portlet:namespace />myForm',
                             rules: myRules 
                          });

  new Liferay.AutoFields({
    contentBox: '#my-fields',
    fieldIndexes: '<portlet:namespace />indexes',
    on: {
        'clone': function(container){

             //Lookup the clone
             AUI().all('[name^=<portlet:namespace />elementId]').each(function(node, index){

             if(container.row.contains(node)){
                console.log("Assign to " + node.get('id'))
                //inject the rules
                myRules [node.get('id')] = rulesRepository[elementIdPrefix]
             }
            })
        }
   }
 }).render();
});

</script>

理想情况下,您应该能够使用子选择器从clone容器中获取节点。我不得不提供一种不同的方法,因为我无法让这种方法发挥作用。我可以使用我的方法的原因是因为我知道它elementIdPrefix是什么。为了能够提供一个例子,我继续并利用了这个事实。

myNode.one('> selectorString');对于更动态的方法,必须使用诸如选择器之类的选择器。

于 2014-06-09T15:00:26.653 回答