Backbone破坏了没有服务器通信

时间:2013-02-12 13:06:14

标签: javascript rest backbone.js coffeescript slim

这是我的退出点击事件:

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?

2 个答案:

答案 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属性的模型才能销毁。

换句话说,你需要先保存。