如何在不丢失无效输入的情况下呈现视图中的Backbone.Model错误

How can I render Backbone.Model errors in a view without losing the invalid input?

本文关键字:视图 Backbone 错误 Model 情况下 输入 无效      更新时间:2023-09-26

我在Backbone View中有一个表单,其中用户输入被收集并存储在模型中。假设用户输入的信息违反了支持模型的验证逻辑。如何在不丢失无效输入的情况下将这些错误输出到视图?

目前,我只是重新渲染视图,它将所有输入替换为模型中的输入,但由于无效输入从未存储在那里,它们丢失了。

有没有一种简单的方法可以捕获所有无效数据,并将其与错误消息一起重新呈现,或者我必须编写自定义jQuery来在表单DOM中附加嵌套的错误消息而不重新呈现它?

您的视图可以跟踪validate方法引发的错误事件,并相应地进行渲染。例如,

var MView=Backbone.View.extend({
    initialize: function() {
        this.model.bind("error",this.renderErr,this);
        this.model.bind("change",this.render,this);
    },
    render: function() {
        console.log("ok");
    },
    renderErr: function(model,attrs) {
       //attr contains the attributes passed to validate
        console.log(attrs);
    }
});
var M=Backbone.Model.extend({
    defaults: {
        name:"locked",
        whatever:"value"
    },
    validate:function(attrs) {
        //returns the attributes being set. Will be used in the renderErr method
        if (attrs.name!="locked") return attrs;
    }
});
var m=new M();
var mv=new MView( {model:m} );
mv.render();
m.set({name:"err",whatever:"other"});
m.set({name:"locked",whatever:"other"});