我一直在关注Backbone的教程,并在此处设置了我的任务项目:
现在在我的单个任务视图中,我有一个验证错误,我需要found out here {validation:true}
它的作用是防止用户输入空值(即:删除当前值)但是我不能阻止用户只输入空格
我的模型和验证方法:
App.Models.Task = Backbone.Model.extend({
validate: function(attrs) {
var errors = this.errors = {};
if (attrs.title != null) {
console.log('title is not null');
if ($.trim(attrs.title) == null) {
alert('error');
console.log('title is required');
}
}
// if ( $.trim(!attrs.title) ) {
// return false;
// }
}
});
您可以在此处设置新值:
editTask: function() {
var newTaskTitle = prompt(this.msgPrompt, this.model.get('title'));
// check for null value
if ( !newTaskTitle ) return;
console.log(newTaskTitle);
this.model.set('title', newTaskTitle, { validate : true });
},
If you notice in my example您可以更改值并且它可以正常工作,或尝试删除并提交空值,验证将停止它,但是如果用户只添加空格,您将如何有效地不更改值?
答案 0 :(得分:3)
来自fine manual:
验证
model.validate(attributes, options)
[...]如果属性有效,请不要从验证返回任何内容;如果它们无效,则返回您选择的错误。它可以像要显示的字符串错误消息一样简单,也可以是以编程方式描述错误的完整错误对象。
问题中的validate
永远不会返回任何内容,因此它永远不会捕获无效值。
并且$.trim
适用于字符串,而不是布尔值,所以我不知道这是什么:
if ( $.trim(!attrs.title) ) {
return false;
}
打算这样做。
如果您的validate
看起来更像这样:
validate: function(attrs) {
var errors = { };
if('title' in attrs) {
// Adjust this if you want to allow `null` values.
if($.trim(attrs.title || '') === '') {
errors.title = 'Missing title';
}
}
return _(errors).isEmpty() ? undefined : errors;
}
那么也许你会得到更好的结果。
演示:http://jsfiddle.net/ambiguous/p9ah5/
一些注意事项:
in
operator查看attrs
是否有'title'
键,其中包含任何值。价值可以是null
或false
或0
或'pancakes'
或......我们不关心价值是什么,我们只关心它是否存在所以我们使用in
来确切地说出我们的意思。_.isEmpty
看看我们是否放了它,然后我们就会知道应该返回什么。validationError
中,因此不需要this.error
内容。答案 1 :(得分:0)
啊想出来了!
我想我只会使用验证方法进行更全面的测试,但要检查空格或空格,这就足够了任务视图:
editTask: function() {
var newTaskTitle = prompt(this.msgPrompt, this.model.get('title'));
// check for null value
if ( ! $.trim(newTaskTitle) ) return;
console.log(newTaskTitle);
this.model.set('title', newTaskTitle, { validate : true });
},