私は、ポストモデル、PostListコレクション、PostView + PostListViewを持つ簡単なサンプルのBackbone.jsアプリケーションを作ろうとしています。あなたがフォームに投稿できる場所は簡単で、あなたの投稿を投稿のリストに追加します。Backbone.js - 新しい投稿を作成するコードはどこに行きますか?
投稿フォームで投稿をクリックすると、PostListコレクションのビューである「PostListView」でイベントがトリガーされます。新しい投稿モデルを作成してコレクションに追加するにはどうすればよいですか?私はこのコードをView自体に書いていますか?または、ビューはこれを行うコレクションメソッドを呼び出しますか?カスタムコレクションメソッドを記述することはできますか?もしそうなら、どのように私はそれらをビューから呼び出すことができますか?
Railsの背景から見ると、ビュー(レールコントローラ)ではなくコレクション/モデルにコードを当てるのが当然ですが、ビューからカスタムコレクションイベントを呼び出す方法を理解できません。
コードは以下のとおりです。助けてくれてありがとう!
PostListView.coffee:
class forum.PostListView extends Backbone.View
tagName: 'section'
className: 'post-list'
events:
'click .post-form button': 'submit'
initialize: ->
#causes the view to render whenever the collection's data is loaded
@collection.bind 'reset', @render
@collection.bind 'add', @render
render: =>
$(@el).html JST['postList']()
$postList = this.$('.post-list')
#iterates through posts, renders, appends to <ul>
@collection.each (post) =>
view = new forum.PostView
model: post
collection: @collection
$postList.append view.render().el
return this
submit: ->
console.log "submitted!"
@collection.trigger 'newPost', this.$('.post-form textarea').val()
PostList.coffee:あなたは、コレクションに新モデルを追加し、PostListView
から、PostList
でメソッドを呼び出す
class forum.PostList extends Backbone.Collection
model: forum.Post
url: '/posts'
initialize: ->
this.bind 'newPost', newPost
newPost: (postText) ->
console.log "Collection method called!!"
# post = new forum.Post
# content: postText
# @add post
3つのヒントをお寄せいただきありがとうございます。非常に便利!たくさん消えた。 サーバーにレコードを保存した後にイベントがトリガーされますか?コレクションにコードを追加することができますか? – hurshagrawal
デフォルトではありません。私のアプリケーションでは、私はいつもこれを追加します。 successコールバックでaddを呼び出すか、successコールバックで別の何かがaddを行うイベントをトリガーすることができます。 – maxl0rd