Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干验证函数未被调用_Backbone.js - Fatal编程技术网

Backbone.js 主干验证函数未被调用

Backbone.js 主干验证函数未被调用,backbone.js,Backbone.js,下面的代码中没有调用我的验证函数:- var Vehicle = Backbone.Model.extend({ color: 'green', validate: function (attrs) { var validColors = ['white', 'red', 'blue', 'yellow']; var colorIsValid = function (attrs) { if (!attrs.color) re

下面的代码中没有调用我的验证函数:-

var Vehicle = Backbone.Model.extend({
    color: 'green',
    validate: function (attrs) {
        var validColors = ['white', 'red', 'blue', 'yellow'];
        var colorIsValid = function (attrs) {
            if (!attrs.color) return true;
            return _.contains(validColors, attrs.color);
        }
        if(!colorIsValid(attrs)) {
            return "color must be one of: " +validColors.join(",");
        }
    }
});

var car = new Vehicle();

car.on('error', function (model, error) {
    console.log(error);
});

console.log(car.get('color'));
car.set('color', 'muave');
请看小提琴


有人能告诉我为什么没有调用validate函数吗?

在Backbone.js中
validate
保存时自动调用,但在
设置时不自动调用

如果要在设置值时运行验证,则需要使用
validate
选项。e、 g

car.set('color', 'muave', {validate: true});

当尝试保存对象时,通常在服务器上发生错误时,会触发
error
事件。看

如果要捕获验证失败,请尝试处理
无效
事件:

car.on('invalid', function (model, error) {
    console.log(error);
});

似乎需要编写一些额外的代码来运行验证。 如下图所示:

car.set('color', 'muave', {validate:true});

你期望发生什么?我认为现在可以调用您的验证方法。如果您想知道为什么没有向控制台写入错误,是因为没有触发错误事件。请参阅更新的答案。@Vinet,您说您的小提琴仍然不工作,是不是意味着错误消息(“颜色必须是:白色、红色、蓝色、黄色之一”)没有打印在控制台日志上?我注意到,在你的小提琴中,你仍然使用事件错误,而不是史蒂夫的答案中的无效。