【问题标题】:Backbone model validation standards (Is it wrong to do it this way?)骨干模型验证标准(这样做有错吗?)
【发布时间】:2012-04-26 13:54:37
【问题描述】:

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

   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) 并从模型中渲染它是否违反标准?

【问题讨论】:

    标签: javascript model-view-controller backbone.js


    【解决方案1】:

    恕我直言:是的!.. 看起来不太好。

    您应该在Model 之外实例化View

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

    查看the example in the Model.validate documentation

    虽然你可以很快拥有这样的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 attribute解决。

    【讨论】:

    • 谢谢,是的,也许我需要更仔细地查看 urlRoot。这是我的第一个主干应用程序,所以我确信我的代码有可以改进的地方。
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多