Как обновить коллекцию и просмотреть новые данные из ответа?

Как обновить коллекцию постов новыми данными с сервера в 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
Другие вопросы по тегам