1

嘿,所以我知道骨干在那里改变了验证,我正在努力让它工作?任何人都注意到出了什么问题。这是也验证的 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'));






})();
4

1 回答 1

5

正如@nikoshr 已经回答的那样,这个问题已经解决了这个问题

您基本上必须将{ validate: true }调用的选项传递给set(). 该save()方法总是触发验证。
最后,您的代码将如下所示:

user.set('firstName', '', { validate: true }); // Run validations
user.set('firstName', '');                     // Doesn't run validations
user.save();                                   // Run validations
于 2013-07-09T15:14:50.387 回答