我有一个Backbone.js模型,当用户点击模型视图中的链接时,我正试图销毁它.视图是这样的(伪代码,因为它是在CoffeeScript中实现的,可以在问题的底部找到).

var window.ListingSaveView = Backbone.View.extend({
  events: {
    'click a.delete': 'onDestroy'
  },

  onDestroy: function(event){
    event.preventDefault();
    this.model.destroy({
      success: function(model, response){
        console.log "Success";
      },
      error: function(model, response){
        console.log "Error";
      }
    });
  }
});

当我在浏览器中单击delete链接时,我总是会将Error记录到控制台,即使我的服务器记录了相关数据库记录的成功销毁并返回200响应.当我刷新页面(导致集合从数据库重新呈现)时,我删除的模型将消失.

有趣的是,当我在错误回调中记录response时,它的状态码200表示成功,但它也报告statusText: "parseerror",不管这意味着什么.我的服务器日志(log)中没有错误.

我做错了什么?

这是来自服务器的响应:

  Object
    abort: function ( statusText ) {
    always: function () {
    complete: function () {
    done: function () {
    error: function () {
    fail: function () {
    getAllResponseHeaders: function () {
    getResponseHeader: function ( key ) {
    isRejected: function () {
    isResolved: function () {
    overrideMimeType: function ( type ) {
    pipe: function ( fnDone, fnFail ) {
    promise: function ( obj ) {
    readyState: 4
    responseText: " "
    setRequestHeader: function ( name, value ) {
    status: 200
    statusCode: function ( map ) {
    statusText: "parsererror"
    success: function () {
    then: function ( doneCallbacks, failCallbacks ) {
    __proto__: Object

下面是destroy与(Ruby on Rails)交互的服务器操作

  # DELETE /team/listing_saves/1.json
  def destroy
    @save = current_user.team.listing_saves.find(params[:id])
    @save.destroy
    respond_to do |format|
      format.json { head :ok }
    end
  end

下面是主干视图的实际CoffeeScript实现,供喜欢它的人使用:

class MoveOutOrg.Views.ListingSaveView extends Backbone.View
  tagName: 'li'
  className: 'listing_save'
  template: JST['backbone/templates/listing_save']
  events:
    'click a.delete_saved': 'onDestroy'

  initialize: ->
    @model.bind 'change', this.render
  render: =>
    renderedContent = @template(@model.toJSON())
    $(@el).html(renderedContent)
    this
  onDestroy: (event) ->
    event.preventDefault() # stop the hash being added to the URL
    console.log "Listing Destroyed"
    @model.destroy
      success: (model, response)->
        console.log "Success"
        console.log model
        console.log response

      error: (model, response) ->
        console.log "Error"
        console.log model # this is the ListingSave model
        console.log response

推荐答案

@大卫·图伊特 comments :

"好的,我想出来了.主干网似乎希望JSON响应是被销毁记录的JSON序列化.但是,Rails控制器生成器默认情况下只返回head:Ok.我将JSON响应更改为render JSON:@listing_save,其中@listing_save是我刚刚销毁的记录,它注册成功."

仅供参考——当您进行销毁时,不需要返回已销毁模型的完整json.您可以返回一个空的json哈希,它就可以正常工作了.只需在保存/更新时返回模型的json.

Ruby-on-rails相关问答推荐

Rails6.1|有没有一种方法可以判断哪些关联已经加入到一个范围中?

如何从 Rails7.2 中的控制器获取名称空间?

Ruby on Rails 身份验证:设计注册不起作用

如何在哪里查询 Rails 模型中定义的方法

正确更新其他列的更新列

GroupingError:错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用

如何启动 rails 控制台并专门使用测试数据库?

Rails 发现获取 ActiveRecord::RecordNotFound

如何获取 Ruby on Rails 生成的表单元素 id 以供 JavaScript 参考?

如何让 Rspec 运行嵌套在文件夹下的所有测试?

Rails 4,使用 ActiveRecord 的原始查询

如何避免 has_many :through 关系中的重复?

设计和强大的参数

Rails如何对列求和?

Rails 4 查找没有子元素的父母

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

Redis 引发需要 NOAUTH 身份验证错误,但没有设置密码

在 Rails 应用程序中处理大文件上传的最佳方法是什么?

如何将 ActionMailer default_url_options 的 :host 动态设置为请求的主机名?

您如何访问设计控制器?