Я пытаюсь сделать быстрый пример приложения Backbone.js с моделью Post, коллекцией PostList и PostView + PostListView. Что-то простое, где вы можете опубликовать сообщение в форме, и оно добавит ваше сообщение в список сообщений.
Когда кто-то нажимает «Отправить» в форме сообщения, это вызывает событие в «PostListView», представлении для коллекции PostList. Где создать новую модель поста и добавить ее в коллекцию? Я пишу этот код в самом представлении? Или представление вызывает метод коллекции, который делает это? Можете ли вы даже написать собственные методы сбора? Если да, то как мне вызвать их из представления?
Исходя из фона Rails, я, естественно, склоняюсь к размещению кода в коллекциях/моделях, а не в представлениях (контроллеры 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:
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