レンダリングに渡される引数に応じて、リストを編集するためのフォームまたはリスト自体をレンダリングする Form というビューがあります。表示/編集モードを切り替えることができるように、イベント ハンドラーを追加しました。簡単にするために、以下のコードからこれを取り出しましたが、これはビューがコンテキストで何をするかについて少しコンテキストを提供するだけです。
このフォーム ビューを、フォームまたはリストをレンダリングする必要がある別のビューの子としてインスタンス化できます。これは、フォームとしてレンダリングされる新しいビューで実行しました。
保存する必要があるときは、form:save イベントを呼び出します。これにより、フォームを保存する Form ビューでルーチンがトリガーされます。ここでは、console.log を呼び出して、動作することを示しています。私のコードでは、ApplicationView によって挿入されたナビゲーション ボタンにバインドする $('a#submit').click バインディングを介して form:save を呼び出します (ただし、この質問の目的には関係ないと思います)。
新しいビューから離れて、何度も戻ったとしましょう。保存を押すと、新しいフォーム ビューをインスタンス化してレンダリングした回数だけメソッドが実行されます。
ここのところ:
私は、フォームビューのクローズメソッドで、新しいビューから 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'