【问题标题】:Backbone Relational validationError is not return when validation fails验证失败时不返回主干关系验证错误
【发布时间】:2015-12-18 16:37:25
【问题描述】:

我将我的骨干关系库升级到 0.10.0 我在验证模型时遇到问题,在回调方法中未定义 validationError 属性。该属性在以前的版本中有一个对象。

如果我更改了库文件中的代码,它可以工作,但我想问一下是否有更好的方法或者是否有补丁提前谢谢。

我有一个带有验证方法的模型:

 define( [
'jquery',
'underscore',
'backbone',
'backbonerelational'

], function ( $, _, Backbone, Backbonerelational ) {
'use strict';

var MyModelR = Backbone.RelationalModel.extend( {

    idAttribute: "itemId",
    defaults: {
        _hasServerSideError: false
    },

    validate: function ( attrs, options ) {
        var error;
        if ( !attrs.name ) {
            error = {
                name: 'name',
                message: 'Please enter a name.'
            };
        }
        return error ? error : false;
    },


    url: function () {
        return "/myurl";
    },


    sync: function ( method, model, options ) {

        if ( options.action ) {
            options.emulateHTTP = true;
            options.validate = true;
            options.wait = true;
            options.url = "/myurl" + options.action;
        } else if ( method.toLowerCase() === "update" ) { //default action
            options = options || {};
            options.url = "/myurl";
        }

        Backbone.sync( method, model, options );
    },

    parse: function ( response, options ) {
        //code here
    }


} );
return MyModelR;
} );

我有一个监听无效事件的视图

  myView = Backbone.View.extend( {
           initialize: function ( options ) {
             this.listenTo( this.MyModelR , 'invalid', this.invalidHandler     );
             ...code 
           },
           invalidHandler: function ( model, error, options ) {
            if ( options.validationError ) { //validationError has undefined value
              showError(...)
           }

         });

如果我在第 1899 行调整了主干关系.js 库文件,它可以工作,我想问是否有更好的方法来解决这个问题或者它是一个有效的缺陷?

if ( model && model.validationError ) {
            options.validationError = model.validationError;//Added this line
            this.trigger( 'invalid', this, attrs, options );
            model = false;
        }

【问题讨论】:

    标签: javascript validation backbone.js backbone-relational


    【解决方案1】:

    https://github.com/jashkenas/backbone/blob/master/backbone.js#L727

    签名为callback(model, error, options)options.validationErrorerror 相同。示例:

    var Album = Backbone.Model.extend({
      validate: function(attrs, options) {
        if (attrs.artist.toLowerCase() == 'nickelback') {
          return "No way you're adding that here";
        }
      }
    });
    var album = new Album({artist: 'Nickelback'});
    album.on("invalid", function(model, error, options) {
      alert(options.validationError);
      alert(error); //////////////////////////////////////////// <- look here
    });
    album.save()
    

    【讨论】:

    • 那是骨干模型,它工作正常,我指的是骨干关系,更具体的版本 0.10 github.com/PaulUithol/Backbone-relational/blob/master/… 我试图看看其他参数是否会有错误消息但没有运气,我在骨干关系库本身中更改了行(见上文),但我想问一下我是否丢失或没有正确使用该库
    • @Emmanuel-Lop:从我在他们的源代码中可以看到,他们没有实现_validate,这意味着他们从backbone.Model 继承它,这意味着它应该 工作。话虽如此,有一个地方乳清调用invalidgithub.com/PaulUithol/Backbone-relational/blob/master/…,方法签名完全相同,我能帮助你通过这一点的唯一方法是给我一个完整的例子not 工作,我可以从那里调试它。请使用 jsfiddle
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2020-12-16
    • 2016-02-02
    相关资源
    最近更新 更多