【问题标题】:Backbone: Delete won't bind?Backbone:删除不会绑定?
【发布时间】:2012-01-06 01:54:44
【问题描述】:

我正在尝试绑定我的一个主干视图,以便在删除模型时,它也会从另一个视图中删除。

看起来很简单,但我似乎无法让 destroy 方法绑定到视图。我可以绑定到更改或新模型,但删除不会触发。我记得模糊地读过一些关于绑定删除的怪癖,但我不记得它是什么,更重要的是,我不记得如何绕过它。

任何想法表示赞赏。简而言之,如果有人可以提供一个将删除调用绑定到以下相关代码的示例:

源代码视图

class BackboneDemo.Views.Tasks.ShowView

  # ...
  events:
    "click #mark_task_completed" : "markAsCompleted"
    "click #delete_task" : "destroy"


  destroy: () ->
    $('#contentArea').html('')
    $('#contentWrapper').css('display', 'none')
    @model.destroy()
    this.remove()
    return false

编辑:仍然没有快乐。我在下面添加了更多代码以准确显示问题所在

型号

class MyModel extends Backbone.Model
  # ...

  destroy: () ->
    console.log 'this is getting hit'
    super

目标视图

class TargetView extends Backbone.View
  # ...
  initialize:() ->
    _.bindAll(@, 'destroy', 'testmethod', 'render')
    @model.bind('destroy', @testmethod)

  testmethod: () ->
    console.log 'but this is not getting hit'

【问题讨论】:

  • 绑定到“删除”或“销毁”或“删除”的部分在哪里?
  • 它在目标视图代码中,在初始化中。我尝试了各种不同的线路,希望让它工作,通常沿着 @model.bind('remove', @test_function) 的线路。

标签: javascript backbone.js coffeescript


【解决方案1】:

解决了。万一其他人遇到这个问题,问题在于主干导轨 gem 以及它的 destroy() 函数是如何工作的。有一个待处理的拉取请求可以解决这个问题,但它的缺点是:

  • 确保将集合传递到视图
  • 用这个替换默认的destroy()代码:

    销毁:() -> getViewAndCollection = ((view) -> return -> {collection: @options.collection, view: @})(@)

    @model.destroy() 成功:(模型,响应)-> 变量 = getViewAndCollection() vars.collection.remove 模型 vars.view.remove() 错误:(模型,响应)-> # 任何你想要的错误功能

您可以在待处理的拉取请求 here 中查看更多信息

【讨论】:

    【解决方案2】:

    这是怎么回事:

    MyView = Backbone.View.extend({
        initialize: function(){
            this.model.bind('destroy', this.remove(), this)
        }
    
    })
    

    【讨论】:

    • 您可能不想立即调用 remove,他的示例已经显示了 2 个绑定到 dom 元素的事件,因此他需要先调用 this.unbind(),然后再调用 this.remove()。跨度>
    • 当然他可以调用任何他想要的方法
    • 感谢您的回复。我在上面的问题中添加了更多信息。已经尝试过这个和许多类似的东西,但它只是没有达到那个 .remove() 方法。任何其他想法表示赞赏
    猜你喜欢
    • 2016-03-15
    • 2012-11-07
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多