Backbone.js事件处理程序多次触发
我有一个名为Form的视图,它可以呈现一个表单来编辑列表,也可以呈现列表本身,具体取决于传递给render的参数。我添加了事件处理程序,以便可以切换显示/编辑模式。为了保持简单,我从下面的代码中删除了这一点,但这只是为视图在上下文中所做的事情提供了一点上下文 我可以将这个表单视图实例化为另一个视图中的子视图,该视图需要呈现表单或列表,我在新视图中已经这样做了,在新视图中它将呈现为表单 当我需要保存时,我调用form:save事件,它在表单视图中触发一个保存表单的例程,我刚刚让它在这里调用console.log来显示它的工作原理。在我的代码中,我通过$('a#submit')调用form:save。单击绑定,该绑定绑定到ApplicationView插入的导航按钮(但我认为这与本问题无关) 比方说,我离开了新视图,并多次回到它。当我点击save时,该方法运行的次数与我实例化并呈现新表单视图的次数相同 到目前为止: 我尝试过在新视图的表单视图上使用close方法执行unbind()和remove(),但没有成功 我想我可能在范围界定方面有问题,但我不确定 我知道这与我的导航绑定无关 我认为这可能与僵尸观点有关 有没有让它只运行一次的指针Backbone.js事件处理程序多次触发,backbone.js,backbone-events,backbone-views,Backbone.js,Backbone Events,Backbone Views,我有一个名为Form的视图,它可以呈现一个表单来编辑列表,也可以呈现列表本身,具体取决于传递给render的参数。我添加了事件处理程序,以便可以切换显示/编辑模式。为了保持简单,我从下面的代码中删除了这一点,但这只是为视图在上下文中所做的事情提供了一点上下文 我可以将这个表单视图实例化为另一个视图中的子视图,该视图需要呈现表单或列表,我在新视图中已经这样做了,在新视图中它将呈现为表单 当我需要保存时,我调用form:save事件,它在表单视图中触发一个保存表单的例程,我刚刚让它在这里调用cons
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'
我认为您的问题是,每次要渲染表单时都会创建一个新视图,但并没有摆脱旧视图。您可以做的是销毁旧视图,或者保留对它的引用,而不是每次都创建新视图,只需将模型传递到现有视图并刷新/重新渲染显示我相信您的问题在于每次要渲染表单时都要创建一个新视图,但您并没有摆脱旧视图。您可以做的是销毁旧视图,或者保留对它的引用,而不是每次创建新视图,只需将模型传递到现有视图并刷新/重新渲染显示我认为您遇到了典型的僵尸视图问题,但是我不太明白,在表单被销毁后,新项目的视图会被调用吗?或者在表单范围内?我认为您遇到了一个典型的僵尸视图问题,但是我不太明白在表单被销毁后新项目的视图被调用了什么?或者在表单范围内?好文章:我如何去破坏旧的视图?我尝试创建一个
close
方法,该方法执行@unbind()
和@remove()
操作,并从一个后退按钮调用该方法,该按钮离开新视图并转到其他地方,但当我再次返回新视图时,这个方法仍然会运行多次。如果在没有看到旧视图的情况下销毁旧视图,那么很难判断您的代码有什么问题。您是否尝试过重复使用同一个视图(通过保留对它的引用)而不是每次创建一个新的视图?我已经创建了一个变量将此视图存储在主应用程序对象中,并使用该变量引用其他应用程序对象中的视图。谢谢你的帮助。好文章:我将如何去破坏旧的观点?我尝试创建一个close
方法,该方法执行@unbind()
和@remove()
操作,并从一个后退按钮调用该方法,该按钮离开新视图并转到其他地方,但当我再次返回新视图时,这个方法仍然会运行多次。如果在没有看到旧视图的情况下销毁旧视图,那么很难判断您的代码有什么问题。您是否尝试过重复使用同一个视图(通过保留对它的引用)而不是每次创建一个新的视图?我已经创建了一个变量将此视图存储在主应用程序对象中,并使用该变量引用其他应用程序对象中的视图。谢谢你的帮助。