Backbone不会随REST请求一起发送属性

时间:2013-02-16 17:44:37

标签: javascript rest backbone.js

我目前正在开发一个骨干应用程序,您必须在其中指定一个访客姓名,才能进入。

  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;

因此,在我的首页上,用户设置了一个用户名,并且实例化了一个新的guest虚拟机,这是我处理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请求?

1 个答案:

答案 0 :(得分:0)

显然Backbone(或者实际上是你的浏览器)在骨干保存期间发送OPTIONS请求,带有副作用,因为它试图模拟“真正的”REST,包括PUT和DELETE请求,而不是所有服务器都支持这些命令。

根据这个:

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

如果您设置

Backbone.emulateHTTP = true;

然后它会尝试POST。