如何在backbonejs中获取模型的最新插入ID

时间:2013-02-04 11:26:19

标签: backbone.js codeigniter-restserver

我有一个设置,我可以通过表单动态添加模型。它的数据插入到表的行中。插入该行后,我有一个删除按钮附加到该行。

现在当我尝试删除插入的行时,我无法访问,因为没有唯一的id附加到该特定模型,因此在DELETE请求中没有发送id。但是,一旦我通过提取来刷新整个集合,它就可以工作。

我尝试使用这样的cid获取整个模型:

deleterow:function(){

window.rowList.get(this.model.cid).destroy({wait:true,success:function(){

 }});

这不起作用。我正在使用phil sturgeon REST API进行codeigniter。

编辑:

$this->response(json_encode($Q),201);

这里$ Q填充如下:

    $this->db->where('id',$this->db->insert_id());
    $Q=$this->db->get('rows')->result();

作为回应,我得到这样的数据:

"[{\"id\":\"285\",\"name\":\"\",\"address\":\"\",\"city\":\"\",\"state\":\"\",\"zip\":\"\",\"email\":\"\",\"contact_number\":\"0\",\"alternate_number\":\"0\",\"row_type\":\"\",\"local_vat\":\"\",\"cst\":\"\",\"st\":\"\",\"excise_duty\":\"\"}]"

所以它不是正确的JSON格式。我该怎么办?

1 个答案:

答案 0 :(得分:3)

当Backbone使用model.savecollection.create创建或更新模型时,从服务器发回的任何JSON数据都会自动set进入模型。例如,如果您保存新模型:

var model = collection.create({foo:'bar'});

这会导致POST请求被发送到模型的url根目录,并带有以下正文:

{"foo":"bar"}

您应该将服务器配置为发送回创建的模型作为对POST请求的响应,例如:

{"id":100, "foo":"bar"}

Backbone将自动将响应中的任何新的和已更改的属性复制到模型中,因此您将拥有:

var model = collection.create({foo:'bar'}, {success: function() {
  console.log(model.id); // -> 100
}});