0

在我的 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我想使用相同的对象,而不是再次重新创建它们。所以基本上这段代码需要重构。

我的问题:

如何记住搜索结果?

4

1 回答 1

0

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

于 2012-08-28T01:18:27.293 回答