1

私は現在、入力するためにゲスト名を指定する必要があるバックボーン アプリケーションに取り組んでいます。

  Guest = Backbone.Model.extend({

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

    defaults: {
      name : '',
    },

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

      if(errors.length > 0) {
        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()}, {
    success:function(model, response) {
      console.log('Successfully saved!');
    },
    error: function(model, error) {
      console.log(model);
      console.log(error.error());
    }
  });
},

私の問題は、バックボーンがリクエストを行うときに、指定された名前なしで OPTIONS リクエストを送信し、Wireshark でパケットをチェックしたことです。何が間違っていますか?

おまけの質問: バックボーンが OPTIONS リクエストを送信するのはなぜですか?

4

1 に答える 1

0

どうやらバックボーン (または実際にはブラウザ) は、バックボーンの保存中に副作用のある OPTIONS リクエストを送信します。これは、PUT および DELETE リクエストを含む「真の」REST をエミュレートしようとするためであり、すべてのサーバーがこれらのコマンドをサポートしているわけではありません。

これによれば:

http://backbonejs.org/#Sync-emulateHTTP

設定した場合

Backbone.emulateHTTP = true;

その後、POST を試みます。

于 2013-02-16T17:55:36.550 に答える