Backbone验证不起作用

时间:2014-11-09 19:55:53

标签: javascript validation backbone.js

我正在使用Backbone.js 1.1.2

观看如下:

'use strict';

define(['app/models/Frame', 'app/views/InitialView'], function(Frame, InitialView){

    var AppView = Backbone.View.extend({
        el: '.container',       

        template: _.template($('#appViewTemplate').html()),

        events: {
            'click #exitButton': 'exitApplication',
            'click #addScoreButton': 'handleScores'
        },

        initialize: function(){
            this.render();
        },

        handleScores: function(){

            var score = $('#score').val();

            var frame = new Frame({score: score}, {validate: true});


            frame.on('invalid', function(error){
                console.log('dfsdfdsfds');
            });

            this.collection.add(frame);         

            this.getScoreTable();

        },

        getScoreTable: function(){

            Backbone.sync('create', this.collection, {
                error: function(d){
                    //console.log(d);
                },
                success: function(frames){                  
                    console.log(frames);                    
                }
            });
        },

        exitApplication: function(){
            location.reload();
        },

        render: function(){
            this.$el.html(this.template);
            return this;
        }
    });

    return AppView;

});

模型如下:

'use strict';

define([], function(){

    var Frame = Backbone.Model.extend({

        validate: function(attrs, options){

            if(attrs.score < 0){
                return 'No negative numbers please.';
            }           
        }
    });

    return Frame;
});

我面临的问题是验证没有被触发。我尝试了几乎所有可用的解决方案,例如使用error更改为invalidon('invalid', function(){})。 还尝试使用确实调用frame.validate()函数的validate函数,但当我尝试访问模型属性时,它返回undefined

但它仍然没有用。我不知道我做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

  • Backbone构造函数不验证其值,并允许您根据需要实例化模型
  • 无论如何,您的错误处理都没有附加
  • Validation将在您保存之前和set之前发生,如果{validate:true}作为选项传递。

所以,你可以像这样编写你的handleScores函数:

var frame = new Frame();

frame.on('invalid', function(model, error){
    console.log(model.toJSON(), error);
});

frame.set({score: score}, {validate: true});

演示http://jsfiddle.net/nikoshr/ozykLfxz/