2

我有一个名为 Form 的视图,它呈现一个表单以编辑列表,或者呈现列表本身,具体取决于传递给呈现的参数。我添加了事件处理程序,以便可以切换显示/编辑模式。为了简单起见,我从下面的代码中删除了它,但这只是为 View 在上下文中所做的事情提供了一些上下文。

我可以在另一个需要表单或要呈现的列表的视图中将此表单视图实例化为子视图,我已在 New 视图中将其呈现为表单。

当我需要保存时,我调用 form:save 事件,它会在 Form 视图中触发一个保存表单的例程,我刚刚在此处调用了一个 console.log 来显示它的工作原理。在我的代码中,我通过 $('a#submit').click 绑定调用 form:save 绑定,该绑定绑定到 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'
4

1 回答 1

4

我相信您的问题是您每次要呈现表单时都在创建一个新视图,但您并没有摆脱旧视图。您可以做的是销毁旧视图或保留对它的引用,而不是每次都创建新视图,只需将模型传递给现有视图并刷新/重新渲染显示

于 2012-07-23T14:56:55.703 回答