Backbone,如何记住搜索结果?

时间:2012-08-27 14:34:38

标签: javascript search backbone.js coffeescript

在我的Backbone应用程序中,在搜索结果页面上,我链接到#show操作。此节目动作将显示指定的模型。

- 搜索结果URI

/search

- 指定的模型URI

/:modelName/:viewName/:id

(如您所见,我还将modelName和viewName作为参数传递给路由器操作)

当用户在显示页面上时,他应该可以选择返回搜索结果(例如:“返回搜索结果”按钮)。搜索结果有分页,因此一次又一次地获取它们是不明智的。获取记录也会失去collection州。

我想记住搜索结果。

以下是搜索代码(Backbone.Router操作)

  search: (query) =>
    sentencesCollection = new SI.Collections.Sentences()
    searchParamSets = new SI.Collections.SearchParamSets()

    sentencesView = new SI.Views.SentencesSearchForm(
      collection: sentencesCollection
      searchParamSets: searchParamSets
    )
    resultsView = new SI.Views.SearchResults(
      collection: sentencesCollection
      searchParamSets: searchParamSets
      viewName: "SentencesShow"
    )
    @searchView.show(sentencesView)
    @contentView.show(resultsView)
    @sidebarView.show(new SI.Views.SentencesSearchFilters(
      searchParamSets: searchParamSets
    ))

    new SI.Views.SearchParamSets(collection: searchParamSets)

    if query?
      searchParamSets.reset({name: query})
      sentencesView.appendSearchSetAndGetSentences()

如果用户点击“返回”按钮,则会触发search中的Router操作。我想使用相同的对象,而不是再次重新创建它们。所以基本上这段代码需要重构。

我的问题:

如何记住搜索结果?

1 个答案:

答案 0 :(得分:0)

首先,您不要为每个搜索查询创建集合。首先创建一组查询,然后调用输入侦听器。每个查询都被添加到集合中。每次添加查询时,都会使用get()进行检查,例如queryCollection.get({ query: q })。如果返回undefined,则执行XHR调用。否则,您的结果已经在集合中。