Backbone破坏了没有服务器通信

cl0*_*k3r 1 javascript rest slim coffeescript backbone.js

这是我的注销点击事件:

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
Run Code Online (Sandbox Code Playgroud)

这是我的会话模型:

class App.Model.Session extends Backbone.Model

  initialize: ->
    console.log 'Session.init'

  urlRoot: '/session'
Run Code Online (Sandbox Code Playgroud)

这是我纤细的后端路线:

$app->delete('/session', function () {
  session_unset();
  exit(true);
});
Run Code Online (Sandbox Code Playgroud)

当我触发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
Run Code Online (Sandbox Code Playgroud)

因为你可以看到没有DELETE请求被激活...我从我的session.destroy成功回调中收到一个null res ...我是Backbone的新手,有什么建议吗?也许我必须设置Backbone.sync?

Das*_*shK 5

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

参考:

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

App.Session.set('id', '_session_id_');
Run Code Online (Sandbox Code Playgroud)

但是,当您检索App.Session时,其ID应已设置为会话ID.在这种情况下,从服务器检索会话时,您可能希望手动执行此步骤.


边注

如果你想打电话给你的ID作为属性sessionID,而不是仅仅的ID,你也可以覆盖默认idAttributeBackbone.Model.

App.Session.Model
  idAttribute: 'sessionId'
Run Code Online (Sandbox Code Playgroud)