在我的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
操作。我想使用相同的对象,而不是再次重新创建它们。所以基本上这段代码需要重构。
我的问题:
如何记住搜索结果?
答案 0 :(得分:0)
首先,您不要为每个搜索查询创建集合。首先创建一组查询,然后调用输入侦听器。每个查询都被添加到集合中。每次添加查询时,都会使用get()
进行检查,例如queryCollection.get({ query: q })
。如果返回undefined,则执行XHR调用。否则,您的结果已经在集合中。