1

这是我的注销点击事件:

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 事件时,一切正常,但我无法通过我的萤火虫看到任何服务器通信(没有 DELETE 或 GET 到 /session ...)。

萤火虫输出:

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 成功回调中收到空 res...我是 Backbone 的新手,有什么建议吗?也许我必须设置 Backbone.sync?

4

2 回答 2

5

如果您在新模型上调用 Model.destroy(...)(其中 Model.isNew() === true)。.destroy(...) 不会做任何事情。

参考:

“强制”销毁的一种方法是手动将模型的 ID 设置为非 NULL,例如...

App.Session.set('id', '_session_id_');

但是,当您检索 App.Session 时,它的 ID 应该已经设置为会话 ID。在这种情况下,从服务器检索会话时,您可能需要手动执行此步骤。


边注

如果你想调用你的 ID 属性sessionID而不仅仅是 id,你也可以覆盖默认idAttribute的 on Backbone.Model

App.Session.Model
  idAttribute: 'sessionId'
于 2013-02-12T13:12:47.483 回答
2

App.session 有ID吗?

只有具有 id 属性的模型才能被销毁。

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

于 2013-02-12T13:22:51.453 回答