我正在使用骨干验证功能,但它再次出现此错误Uncaught TypeError: Object [object Object] has no method 'apply'
。我真的不知道为什么它会给我这个错误。
这是我的代码
$(function () {
var Veh = new Backbone.Model.extend({
validate: function (attrs) {
var validColors = ['white','red', 'black'];
var colorIsValid = function (attrs) {
if(!attrs.color) return true;
return _(validColors).include(attrs.color);
}
if(!colorIsValid(attrs)) {
return 'wrong color';
}
}
});
var car = new Veh();
car.on('error', function (model, error) {
console.log(error);
});
car.set('foo', 'bar');
});
答案 0 :(得分:1)
更新:错误是使用新的。使用Backbone.extend时不要做新的事情。这是因为您正在创建一个类而不是一个对象。
$(function () {
var Veh = Backbone.Model.extend({
validate: function (attrs) {
var validColors = ['white','red', 'black'];
var colorIsValid = function (attrs) {
if(!attrs.color) return true;
return _(validColors).include(attrs.color);
}
if(!colorIsValid(attrs)) {
return 'wrong color';
}
}
});
通知
var Veh = Backbone.Model.extend
代替
var Veh = new Backbone.Model.extend
请参阅this问题,了解无意中使用新的副作用。
答案 1 :(得分:1)
如果您有未经过编辑的版本,则可以单步执行代码并查看错误的位置。无论如何,我会立即做的是更改colorIsValid
函数的参数名称,因此它与外部函数不同...
validate: function (attrs) {
var validColors = ['white','red', 'black'];
var colorIsValid = function (modelAttrs) {
if(!modelAttrs.color) return true;
return _(validColors).include(modelAttrs.color);
}
if(!colorIsValid(attrs)) {
return 'wrong color';
}
}