0

我是backbone.js 的新手,我正在尝试使用restful API 制作一个简单的模型,但我似乎无法使简单的POST 操作正常工作。

据我了解,如果模型元素没有设置属性“id”并且调用了 save() 函数,模型将向服务器发出 post 命令(模型的 url),并且需要接收回HttpStatus.OK (200) 和项目的新 id。

这是JS代码:

  this.model = new MYAPP.menuItem();
  this.model.save();
  console.debug("the new id is:", this.model.get("id")) <-- this is undefined

我使用弹簧控制器作为服务器端。这是控制器代码

@RequestMapping(value = "/menuItem",method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK )
@ResponseBody
public Long addmenuItem(Model model) {
    return new Long(1);
}

Post 调用正常到达服务器并且调用了控制器,但是您可以看到模型的 id 没有更新。

我究竟做错了什么?

谢谢。

根据要求的附加代码:

    initialize: function() {
  console.debug("initializing new view");
  this.model = new MYAPP.Event();
  this.model.save({
      success: function( model ) {
        console.log( model.get('id') );
      }
    });
  var source   = $("#index-template").html();
  this.template = Handlebars.compile(source);
  console.debug("view collection", this.model);
  this.model.on('all', this.render, this);
  //this.recipes.fetch();
},

对不起,一团糟!

4

1 回答 1

2

.save()方法是异步的。因此,id服务器不会立即返回 。试试这样:

var self = this;
this.model.save().done(function() { console.log( self.model.get('id') ); });

编辑由于您在引用对象时遇到问题,您可以通过这种方式获得相同的结果:

this.model.save({
  success: function( model ) {
    console.log( model.get('id') );
  }
});

一些聊天后编辑似乎返回的数据无效。保存后,服务器应返回带有 json 的完整对象编码(带有 id)。

于 2013-01-13T21:05:49.440 回答