1

この非常にシンプルなゲストモデルを取得しました

define([
], function() {
  Guest = Backbone.Model.extend({

    urlRoot : ftd.settings.rest + '/guest',

    defaults: {
      id : '',
      name : '',
      accessToken : ''
    },

    validate: function( attr ) {
      var errors = [];
      if(attr.name.length < 4) {
        errors.push({message : "You nickname, must be atleast 4 chars", name : 'guestNickname'});
      }
      return errors;
    }
  });

  return Guest;
});

次に、ゲストがサインアップするフロントページビューを取得しました。基本的に、これは送信ボタンをクリックすると発生します。

createGuest: function( ev ) {
  ev.preventDefault();
  // Get nickname.
  var guest = new Guest();
  guest.bind( 'error', function( model, errors ) {
        _.each( errors, function( err ) {
      $('input[name=' + err.name + ']').addClass('invalid');
      // add a meesage somewhere, using err.message
          }, this );
  });

  guest.save({
    'name' : $('input[name="guestNickname"]').val()
  }, {
    wait:true,
    success:function(model, response) {
      console.log('Successfully saved!');
    },
    error: function(model, error) {
      console.log(error);
    }
  });
},

そのため、入力要素から名前を取得し、それを save メソッドに入れます。問題は、バックボーンがサーバーにリクエストを送信せず、単にエラー イベントをトリガーすることです。空のエラー配列を出力します。私は何を間違っていますか?

4

1 に答える 1

1

検証が成功した場合、何も返さないはずです。

空の配列を返しているため、配列が検証エラーであると想定しています。

これを試して:

validate: function( attrs ) {
      var errors = [];
      if(attrs.name.length < 4) {
        errors.push({message : "You nickname, must be atleast 4 chars", name : 'guestNickname'});
      }
      if(errors.length > 0){
          return errors;
      }
    }
于 2013-02-16T09:17:06.720 に答える