Как обновить коллекцию и просмотреть новые данные из ответа?
Как обновить коллекцию постов новыми данными с сервера в handleSliderChange()
? Когда я пытаюсь использовать fetch()
в $.getJSON
коллекция сбрасывается со старыми данными.
define ['jquery','backbone','app','views/posts/post_view','templates/posts/index'],
($, Backbone, App, PostsView) ->
class App.Views.Posts.IndexView extends Backbone.View
template: JST["posts/index"]
events:
"slidechange #slider": "handleSliderChange"
initialize: () ->
@options.posts.on('reset', @render, @)
addAll: () ->
@options.posts.each(@addOne, this)
addOne: (post) ->
view = new PostView({model: post})
$(@el).find("#list").append(view.render().el)
slider: ->
$(@el).find("#slider").slider({})
handleSliderChange: (e, ui) ->
self = this
$.getJSON "/posts?scope="+ui.value, (data) ->
#how to update posts collection with 'data'?
render: ->
$(@el).html(@template(posts: @options.posts.toJSON()))
@slider()
@addAll()
@
1 ответ
Решение
Использование Collection.reset
заменить существующую коллекцию новыми моделями. Предполагая, что ответ от "/ posts? Scope? Ui" является массивом хэшей, вы должны использовать:
$.getJSON "/posts?scope="+ui.value, (data) ->
self.collection.reset data
Обратите внимание, что Collection.fetch
это похоже на вызов getJSON с последующим сбросом, так что вы можете использовать его вместо этого.
options = {}
options["url"] = "/posts?scope="+ui.value
@collection.fetch options