2012-07-23 44 views
2

我有一个名为窗体视图呈现无论是形式编辑列表,或列表本身,取决于传递什么参数来渲染。我添加了事件处理程序,以便显示/编辑模式可以切换。我已经从下面的代码中解决了这个问题,以保持简单,但是这只是为View提供了一些背景知识。Backbone.js的事件处理程序触发多次

我可以实例化这个表单视图作为另一种观点认为一个孩子,需要一个形式,或者该列表被渲染,这是我的新观点,它会被渲染为一种形式所做的一切。

当我需要拯救,我称之为形式:保存事件,这将触发程序在保存表单的形式来看,我只是做它调用的console.log这里要说明它的工作原理。在我的代码中,我通过一个$('a#submit')。call的form:save来绑定一个由ApplicationView插入的导航按钮(但我认为这对于这个问题的目的不重要)。

可以说,我从导航新观点了,我回去给它的次数。当我点击保存时,该方法运行我实例化并呈现新窗体视图的次数。

到目前为止:

我试着做解除绑定()和remove()中从没有运气的新形式来看视图close方法。

我想我可能在确定范围时遇到问题,但我不确定。

我知道这与我的导航绑定无关。

我认为这可能与僵尸视图有关。

任何使它只运行一次的指针?

App.Views.New = Support.CompositeView.extend 
initialize: (options) -> 
    _.bindAll this, 'render' 
    @model = new App.Models.Item() 

render: -> 
    self = this 

    form = new App.Views.Form model: @model, collection: @collection 

    @$el.append form.render().el 

    setTimeout (-> 
     $('a#submit').click (e) -> 
      e.preventDefault() 
      App.eventHandler.trigger 'form:save' 
    ), 0 
    this 

App.Views.Form = Support.CompositeView.extend 
initialize: -> 
    _.bindAll this, 'render', 'save' 

    App.eventHandler.on 'form:save', @save 

render: -> 
    self = this 
    # RENDER TEMPLATE HERE 
    this 

save: -> 
    console.log 'form saved' 
+1

,我认为你是在一个经典的僵尸视图问题,但是我不太明白在这个窗体被销毁之后调用这个新的视图。或者在表单范围内? – 2012-07-23 14:57:44

回答

3

我相信你的问题是,你正在创建要渲染的形式,每次有新的观点,但你没有摆脱旧的观点。你能做的要么是摧毁你的旧观点,或保持对它的引用和,而不是每次都创建一个新的观点,只是在模型传递到现有视图并刷新/重新呈现在显示器

+1

好文章:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ – stusmith 2012-07-23 15:08:35

+0

我怎么会去破坏一个旧的看法?我试过创建'@unbind()'和'@remove()'的'close'方法,并从后退按钮调用该方法,该方法会保留新视图并前往其他位置,但是当我返回到新视图再次,该方法仍然运行多次。 – Ian 2012-07-23 15:08:38

+0

它有点难以分辨您的代码可能会出现什么问题,而无法看到它而摧毁旧视图。您是否尝试过重复使用相同的视图(通过保留对其的引用)而不是每次都创建一个新视图? – Jack 2012-07-23 20:27:13

相关问题