是否有可能用我的骨干应用修复这种竞争条件?

时间:2013-10-21 22:11:39

标签: backbone.js race-condition

我正在使用Backbone遇到可能的竞争条件。

当用户点击左侧来回链接时,我最终会获得嵌套视图。

当一次点击仍在加载视图时,通常会发生这种情况。

http://screencast.com/t/oLsZQga1

我能做些什么来解决这个问题吗?我已经尝试使用_.debounce(),它在本地工作得很好,但是一旦我把它放到带有真实数据的测试环境中,我就会再次开始嵌套视图。

编辑:有些代码可能会有所帮助;)。

这是左侧两个链接的视图:

events: 
  "click" : "close"

initialize: =>
  super
  @close = _.debounce @_close, 1500, true

_close: (e) =>
  e.preventDefault() if e
  e.stopPropagation() if e
  id = @model.get('_id') || @model.get('id')
  @publishEvent "!router:route", "fan/#{id}"

这是右边结果的视图:

attach: ->
  super
  $(".fanViewButton").parents("li:first").addClass("active")
  @initSubViews()
  @updateFanHistory()

initSubViews: ->
  @subview("memberDataView", new GeneralInfo({container:'div.left .row-fluid', model:@model}))
  @subview("fanHand", new FanHand({container: @$el.find('.fanHandContainer'), model: @model}))
  @subview("gatherInfo", new GatherInfo({container: @$el.find('.gatherInfoContainer'), model: @model}))
  @subview("fanScores", new FanScores({container:@$el.find('.center .row-fluid'), model : @model}))
  @setHeight()

如果你需要更多东西,请告诉我,因为我对Backbone很新。

谢谢大家:)。

1 个答案:

答案 0 :(得分:0)

看起来您只是不删除子视图。如果在关闭函数上,你确保删除子视图中容器内的任何内容,它应该为你清除DOM。类似于:$('.subviewContainer').remove()