假设您的表单中存在一些“模板” <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');
对于更动态的方法,必须使用诸如选择器之类的选择器。