繁体   English   中英

验证失败时,不会返回Backbone Relational validationError

[英]Backbone Relational validationError is not return when validation fails

我将我的主干关系库升级到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行调整了backbone-relational.js库文件,它可以工作,我想询问是否有更好的方法来解决这个问题,或者它是一个有效的缺陷?

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM