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

更新: エラーは new の使用です。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 に答える