我正在使用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
更改为invalid
,on('invalid', function(){})
。
还尝试使用确实调用frame.validate()
函数的validate
函数,但当我尝试访问模型属性时,它返回undefined
。
但它仍然没有用。我不知道我做错了什么。任何帮助将不胜感激。
答案 0 :(得分:1)
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});