这是我的退出点击事件:
logoutClicked: (event) ->
event.preventDefault()
console.log 'userPanel.logoutClicked -> event', event
console.info App.session
App.session.destroy
wait: true
success: (model, res) ->
console.log 'session.destroy.success -> model/res', model, res
error: (model, res) ->
console.log 'session.destroy.error -> model/res', model, res
这是我的会话模型:
class App.Model.Session extends Backbone.Model
initialize: ->
console.log 'Session.init'
urlRoot: '/session'
这是我纤细的后端路线:
$app->delete('/session', function () {
session_unset();
exit(true);
});
当我触发logoutClicked事件时,一切正常,但我无法通过我的firebug看到任何服务器通信(没有DELETE或GET到/ session ...)。
Firebug输出:
userPanel.logoutClicked -> event Object { originalEvent=Event click, type="click", timeStamp=18807379, altri elementi...}
Session { cid="c1", attributes={...}, _changing=false, altri elementi...}
session.destroy.success -> model/res Session { cid="c1", attributes={...}, _changing=false, altri elementi...} null
因为你可以看到没有激活DELETE请求...我从session.destroy成功回调中收到一个null res ... 我是Backbone的新手,有什么建议吗?也许我必须设置Backbone.sync?
答案 0 :(得分:5)
如果在新模型上调用Model.destroy(...)(Model.isNew()=== true)。 .destroy(...)不会做任何事情。
参考:
要强制调用destroy的一种方法是手动将Model的ID设置为NULL,如...
App.Session.set('id', '_session_id_');
但是,当您检索App.Session时,其ID应该已经设置为会话ID。在这种情况下,从服务器检索会话时,您可能希望手动执行此步骤。
旁注
如果您想将ID属性称为sessionID
而不是ID,您还可以覆盖idAttribute
上的默认Backbone.Model
。
App.Session.Model
idAttribute: 'sessionId'
答案 1 :(得分:2)
App.session有ID吗?
只有具有id属性的模型才能销毁。
换句话说,你需要先保存。