2014-05-06 59 views
0

我正在尝试在我的Marionette应用程序中使用Backbone模型。我有一个集合视图,它正确显示了我具有特定模型的所有条目。项目视图包含一个删除按钮。它侦听该按钮的点击,当这样的点击发生调用删除功能:如何在模型破坏时在服务器上获得骨干模型的ID

events: { 
    'click .deleteItem': 'deleteItem' 
}, 
deleteItem: function (event) { 
    console.log('id', this.model.id); 
    this.model.destroy({ wait: true }); 

} 

this.model.destroy正确地作出一个DELETE请求到myModel/ URL,但它似乎并没有包含任何信息,这是进入被删除。例如,在服务器端(一个Node.js服务器),我没有在req.body中看到任何东西(是的,我正在使用正文解析器)。如何获得我在服务器端响应DELETE请求时要删除的条目的ID?

注:我可以很容易够不上客户端:this.model.id

+0

难道你不能从路线参数中得到它吗? –

+0

@moderndegree如何?如果我'app.delete('/ myModel /:id',func ...)',我得到了'/ myModel'的404错误。 – Shawn

+0

如果我将模型的url设置为'/ myModel /:id',它会将DELETE请求发送给'/ mymodel /:id',而不是使用要删除的条目的实际ID替换':id' – Shawn

回答

0

使用路由参数:

app.delete('/thing/:id', function(req, res){ 
    console.log('deleting ' + req.params.id); 
}); 

然后你的模型是这样的:

var ThingModel = Backbone.Model.extend({ 
    idAttribute: '_id', // or whatever your id attribute is 
    urlRoot: '/thing' 
}); 

然后你会像这样删除它:

var someThing = new ThingModel({_id:123, foo:'bar'}); 
someThing.destroy(); 

这听起来像你没有声明你的模型的urlRoot。请阅读here

+0

如果我这样做,我得到'DELETE http:// localhost:5000/myModel 404(Not Found)' – Shawn

+0

你设置了urlRoot吗? –

+0

不,我应该怎么设置urlRoot? – Shawn