我想使用Backbone.js
实现一个搜索页面。搜索参数取自一个简单的表单,服务器知道解析查询参数并返回结果的json数组。我的模型大致如下所示:
App.Models.SearchResult = Backbone.Model.extend({
urlRoot: '/search'
});
App.Collections.SearchResults = Backbone.Collection.extend({
model: App.Models.SearchResult
});
var results = new App.Collections.SearchResults();
我希望每次执行results.fetch()
时,搜索表单的内容也将与GET
请求一起序列化。是否有简单的方法来添加此内容,或者我的方法不正确,可能应该手动编写请求并从返回的结果中创建集合:
$.getJSON('/search', { /* search params */ }, function(resp){
// resp is a list of JSON data [ { id: .., name: .. }, { id: .., name: .. }, .... ]
var results = new App.Collections.SearchResults(resp);
// update views, etc.
});
有什么想法?
4条答案
按热度按时间jpfvwuh41#
Backbone.js fetch with parameters回答了您的大部分问题,但我也在这里提出了一些问题。
将
data
参数添加到您的fetch
调用中,例如:现在您的调用url已经添加了可以在服务器端解析的参数。
8e2ybdfx2#
我认为您应该将功能分开:
搜索模型
它是您服务器端的正确 * 资源 *。唯一允许的操作是
CREATE
。结果集合
它只负责收集Result模型的列表
搜索表单
您可以看到,此视图正在执行智能作业,侦听
form.submit
,创建一个新的Search
对象并将其发送到服务器成为created
。此created
使命并不意味着必须将搜索存储在数据库中,这是正常的creation
行为,但它并不总是需要这样。在我们的例子create
中,搜索意味着搜索DB,寻找具体的寄存器。我认为这种解决方案非常干净、优雅、直观,而且非常具有可扩展性。
z9zf31ra3#
找到了一个非常简单的解决方案--重写集合中的
url()
函数:希望这不会吓到任何比我有更多的 Backbone / Javascript技能的人。
bqjvbblv4#
看起来当前版本的Backbone(或者jQuery)会自动将
data
值字符串化,因此不再需要调用$.param
。下列行产生相同的结果:
查询字符串将为
filter=abc&page=1
。编辑:这应该是一个评论,而不是回答。