【问题标题】:Backbone destroy no server communication主干破坏没有服务器通信
【发布时间】:2013-02-12 21:22:51
【问题描述】:

这是我的注销点击事件:

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...)..

萤火虫输出:

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?

【问题讨论】:

    标签: javascript rest backbone.js coffeescript slim


    【解决方案1】:

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

    参考:

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

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

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


    旁注

    如果您想将您的 ID 属性称为 sessionID 而不仅仅是 id,您还可以覆盖 Backbone.Model 上的默认 idAttribute

    App.Session.Model
      idAttribute: 'sessionId'
    

    【讨论】:

    • 感谢您的澄清,现在我看到我的 session.destroy 触发 /session/:id DELETE 请求,我必须将我的 php 路由更改为 "$app->delete('/session/: id'.." 还是有办法在没有 id 的情况下触发 DELETE 请求?
    • 你可以重写 App.Session.Mode 的 isNew 方法返回 false。应该这样做!
    【解决方案2】:

    App.session 有 ID 吗?

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

    也就是说,你需要先保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      相关资源
      最近更新 更多