我有一个名为Form的视图,它可以呈现编辑列表的表单,也可以呈现列表本身,具体取决于传递给渲染的参数。我添加了事件处理程序,以便可以切换显示/编辑模式。我已经从下面的代码中解决了这个问题,以保持简单,但这只是给出了View在上下文中所做的一些上下文。
我可以将这个窗体视图实例化为另一个视图中的子视图,该视图需要一个表单或要呈现的列表,我在新视图中完成了它,它将作为一个表单呈现。
当我需要保存时,我调用表单:save event,它在Form视图中触发一个保存表单的例程,我刚刚在这里调用了console.log来显示它的工作原理。在我的代码中,我调用表单:通过$('a#submit')保存。单击绑定绑定到由ApplicationView插入的导航按钮(但我不认为这对于此问题的目的很重要。)
让我们说我远离新视图,我会多次回到它。当我点击保存时,该方法运行我实例化的次数并呈现一个新的窗体视图。
到目前为止:
我尝试在New视图的Form视图中的close方法中执行unbind()和remove(),但没有运气。
我想我可能会遇到范围问题,但我不确定。
我知道这与我的导航绑定无关。
我认为这可能与僵尸观点有关。
任何使它只运行一次的指针?
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'
答案 0 :(得分:3)
我相信您的问题是,每次要渲染表单时都要创建一个新视图,但是您没有摆脱旧视图。您可以做的是破坏旧视图,或者保留对它的引用,而不是每次都创建一个新视图,只需将模型传递给现有视图并刷新/重新呈现显示