骨干验证功能不起作用

时间:2012-10-21 10:09:11

标签: javascript jquery backbone.js

我正在使用骨干验证功能,但它再次出现此错误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');
});

2 个答案:

答案 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';
    }
}