1

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

2 回答 2

1

更新:错误是使用新的。使用 Backbone.extend 时不要做 new。这是因为您正在创建一个类而不是一个对象。

$(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

有关无意中使用 new 的副作用,请参阅此问题。

于 2012-10-21T10:26:57.040 回答
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';
    }
}
于 2012-10-21T10:37:52.183 回答