2013-02-19 72 views
0

我对grails 2.1.0使用grails JQuery Validation UI Plugin使用JQuery验证用户界面插件验证自定义约束

基于我的命令对象约束,我几乎让我的窗体虚拟客户端。 有一个问题,我有一个自定义的约束在我的命令对象:

startTime(nullable: false, validator: {startTime, deal -> 
    if ((!DateUtils.isSameDay(startTime, new Date()) && startTime.before(new Date()))) //Start date is today or future but not before end date 
    { 
     return "pastDate" 
    } 
    if (deal.endTime && startTime.after(deal.endTime)) { 
     return "before.endTime" 
    } 
}) 


这导致在页面标记生成以下渲染jQuery验证码:

startTime: { 
    date: true, 
    required: true, 
    validator: { 
    url: '/appContextRoot/JQueryRemoteValidator/validate', 
    type: 'post', 
    data: { 
     validatableClass: 'myapp.command.tester.testerDealCommand', 
     property: 'startTime' 
    } 
    } 
} 

的俗制约逻辑与“验证者:”目前没有任何作用。

什么是最好的方法来让这个自定义验证工作?
1:某种形式的Ajax调用?
2:使用自定义约束插件并将js代码添加到grails-validation-methods.js?
3:其他方法?

我不确定使用选项2 ....是否有某种方法来扩展插件?

我不想在我们的源代码存储库中提交并维护插件的单独版本。

+0

验证像这样的处理日期我喜欢做的服务器端,因为JavaScript的日期对象是奇怪的([夏令时问题,并取决于机器/浏览器](http://stackoverflow.com/questions/2532729/daylight-saving-time-and -timezone条最佳实践))。因此,对于您的情况,如果在发布数据之前确实需要执行此操作,我会使用ajax调用。 – 2013-02-19 17:57:58

+0

请仅使用合适的标签。 '[jquery-validation-engine]'不是你链接的插件。编辑。 – Sparky 2013-02-19 18:15:11

+0

@SérgioMichels - 日期约束只是我可以提供的最简单的例子,实际上我有更多的自定义约束包含更复杂的领域逻辑。 – 2013-02-19 20:19:23

回答

1

如果我理解正确的插件,没有必要直接添加自定义验证到grails-validation-methods.js

如果后装入你的脚本,你可以按照自己的惯例:

jQuery.validator.addMethod("myCustomValidation", function(value, element, params) { 
    //perform your validation here 
}, "Custom validation fail.");