如何在骨干分页集合中保留当前页面的其他url参数?

时间:2013-11-11 23:27:00

标签: javascript backbone.js collections fetch

如何保留最新的搜索参数,例如latlngadditional,并在更改分页时使用当前页面参数获取它们?现在,当页面被更改时,其他参数就消失了。

在某些视图中使用新数据参数获取集合:

@options.posts.fetch({ 
  data: { page: 1, lat: x.latitude, lng: y.longitude, additional: eg.test }
  processData: true 
})

Paginated Collection:

define [
  'backbone'
  'myapp'
  'models/post'
  # 'collections/paginated'
],
( Backbone, App, Post) ->
  class App.Collections.Posts extends Backbone.Collection
    model: Post
    url: "/posts"
    initialize: ->

    fetch: (options = {}) ->
      @trigger "fetching"
      self = this
      success = options.success
      options.success = (resp) ->
        self.trigger "fetched"
        success self, resp if success
      Backbone.Collection::fetch.call this, options

    parse: (resp) ->
      @current_page = resp.current_page
      @total_pages = resp.total_pages
      resp.items

修改

正如你在回答中建议的那样,我将变量存储在collection和override url函数中:

url: ->
  "/posts?" + $.param(
    additional: @additional
    lat: @lat
    lng: @lng
  )

或在视图中:

@options.posts.url = "/posts?" + $.param({ additional: eg.test, lat: x.latitude, lng: y.longitude })
@options.posts.fetch({reset: true})

我不知道这种模式是否正确,但这个解决方案正在发挥作用。

1 个答案:

答案 0 :(得分:0)

2种方式:

  1. 当服务器端收到提取请求时。它会回复latlngadditional值。

  2. 使用一些结构来存储变量。 e.g

    # use collection object
    @options.posts.lat = x.latitude
    @options.posts.lng = y.longitude
    @options.posts.additional = eg.test
    
    # use DOM
    $(document).data("lat", x.latitue)
    $(document).data("lng", y.longitude)
    $(docuemnt).data("additional", eg.test)