将Backbone.js View remove()方法与jQuery';s衰减()
我相信我的标题几乎解释了我希望实现的目标,我对一个通过 更准确地说:将Backbone.js View remove()方法与jQuery';s衰减(),jquery,backbone.js,coffeescript,Jquery,Backbone.js,Coffeescript,我相信我的标题几乎解释了我希望实现的目标,我对一个通过 更准确地说: class Project.Views.MemberView extends Backbone.View template: JST['members/member_view'] events: 'click .destroy-member': 'removeMember' initialize: -> _.bindAll(this, "render") render: ->
class Project.Views.MemberView extends Backbone.View
template: JST['members/member_view']
events:
'click .destroy-member': 'removeMember'
initialize: ->
_.bindAll(this, "render")
render: ->
$(@el).html(@template(member: @model))
this
removeMember: ->
@model.destroy
data:
collective_id: gon.collective.id
contentType: 'application/json'
success: =>
@remove() #view.remove() called here
调用view.remove()效果很好,正如预期的那样,但是它会立即从DOM中删除元素(视图),我认为这不是很好的用户体验
我需要知道的是,是否有一种方法可以将此调用包装或链接到view.remove()。在我看来,这将大大改善用户体验
这可能吗
干杯 为什么不在移除之前调用淡出?我不熟悉coffeescript,但在调用模型destroy之前,请执行以下操作:
removeMember: ->
// whatever el you want to remove, just fade it out. from your code maybe its $(@el) ?:
@model.destroy
data:
collective_id: gon.collective.id
contentType: 'application/json'
success: =>
$(@el).fadeOut()
fadeOut()有一个成功的回调-我建议将其用于@remove()调用:
嗨,Evan,您关于目标元素确实是el的假设是正确的,但是不幸的是,您的代码建议没有起作用:(尽管如此,感谢您的回复。)如果我在成功回调中放入您的代码行而不是@remove(),这就是正确的答案!淡出不应自动删除视图或清除事件或任何内容。我怀疑您的@model.destroy方法可能正在进行适当的删除?或者另一种方法正在被触发。我更新了我的答案,以便按照您的建议进行淡出是的,我现在非常清楚发生了什么,@model.destroy()调用将删除底层记录,但是很明显,我们必须等待服务器响应,因此需要在成功回调中淡出()$(@el)。(显然,我们不能同时删除视图和删除模型)。无论如何,感谢您在这方面的启示。:)非常接近!我不知道为什么,但事实上这一点本身是有效的:$(@el).fadeOut(2000),我仔细检查了它,它正在做它的工作,因为记录正在从数据库中删除。但我不明白,可能在主干文档的某个地方,它说fadeOut将导致自动调用remove(),因为似乎是这样。正确的?希望这里有人能解释一下。
removeMember: ->
@model.destroy
data:
collective_id: gon.collective.id
contentType: 'application/json'
success: =>
$(@el).fadeOut(100, @remove())