Backbone中的验证是不是在验证?

时间:2013-07-09 15:06:51

标签: javascript node.js validation backbone.js

嘿所以我知道骨干改变了验证,我试图让它工作?有人注意到出了什么问题。以下是验证的JSfiddle链接。不明白为什么不验证。 http://jsfiddle.net/NcHTb/

代码:

(function () {
    window.App = {
        Models: {},
        Collections: {},
        Views: {},
        Templates: {},
        Router: {}

    };


    App.Models.User = Backbone.Model.extend({
        defaults: {
            firstName: 'first',
            lastName: 'last',
            email: 'Email',
            phone: '222',
            birthday: 'date'
        },

        validate: function (attrs) {
            if (!attrs.firstName) {
                return 'You must enter a real first name.';
            }
            if (!attrs.lastName) {
                return 'You must enter a real last name.';
            }
            if (attrs.email.length < 5) {
                return 'You must enter a real email.';
            }
            if (attrs.phone.length < 10 && attrs.phone === int) {
                return 'You must enter a real phone number, if you did please remove the dash and spaces.';
            }
            if (attrs.city.length < 2) {
                return 'You must enter a real city.';
            }
        }

    });


    var user = new App.Models.User();
    //user.on('change', function () {
    //  console.log('something changed'); - used for change anything
    //});
    user.on('invalid', function (model, invalid) {
        console.log(invalid);
    });
    user.on('change:firstName', function () {
        console.log('something changed');
    });

    user.set('firstName', '');
    console.log(JSON.stringify(user));
    console.log(user.get('birthday'));






})();

1 个答案:

答案 0 :(得分:5)

正如@nikoshr已经回答的那样,问题已经在this question解决了。

您基本上必须将{ validate: true }作为set()来电的选项。 save()方法始终触发验证 最后,您的代码将如下所示:

user.set('firstName', '', { validate: true }); // Run validations
user.set('firstName', '');                     // Doesn't run validations
user.save();                                   // Run validations