骨干模型验证标准(这样做有错吗?

Backbone model validation standards (Is it wrong to do it this way?)

本文关键字:这样做 模型 验证 标准      更新时间:2023-09-26

我正在使用主干创建一个验证视图,该视图将处理给定输入上样式气球中验证消息的显示。 我创建了一个处理此功能的新视图。 为了执行验证并呈现视图,我在模型中设置了以下函数。

   Dashboard.Models.EventModel = Backbone.Model.extend({
    idAttribute: "Id",
    // Model Service Url
    url: function () {
        var base = 'apps/dashboard/EventsDetails';
        return (this.isNew()) ? base : base + "/" + this.id;
    },
    validate: function (attrs) {
        var validTime = (attrs.Time) ? attrs.Time.match(/^(0?[1-9]|1[012])(:[0-5]'d) [APap][mM]$/) : true;
        if (!validTime) {
            new Dashboard.Views.ValidationMessageView({
                $container: $('#txtNewEventTime'),
                message: 'Invalid Time'
            }).render();
                    return 'error';
        };
    }
});

我的问题:创建新视图(ValidationMessageView)并从模型中呈现它是否违反标准?

我直言:是的..它看起来不是很好。

您应该在Model之外实例化View

您应该模型中绑定事件error,从外部捕获它并在那里实例化ErrorView

检查Model.validate文档中的示例

在快速中,您可以拥有这样的AllErrorsView

// code simplfied and not tested
var AllErrorsView = Backbone.View.extend({
  initialize: function(){
    this.model.on( "error", this.showError, this );
  },
  showError: function( model, error ){
    if( error == "txt_new_event_time" ) {
      new Dashboard.Views.ValidationMessageView({
        el:         "#txtNewEventTime",
        message:    "Invalid Time"
      }).render();
    }
    // ... more errors
  }
});
var myAllErrorsView = new AllErrorsView({ model: myModel });

不得不说,这不是我在你的代码中看到的唯一奇怪的东西。例如,我不明白您的Model.url实现的含义,我认为您可以使用Model.urlRoot属性解决它。

相关文章: