如何在视图中呈现Backbone.Model错误而不会丢失无效输入?

时间:2012-01-31 14:45:41

标签: javascript backbone.js

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

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

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

1 个答案:

答案 0 :(得分:2)

您的视图可以跟踪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"});