2012-02-09 45 views
1

在我的应用程序中,我想创建一个搜索表单以检索一些用户。该表格包含许多标准(姓氏,名字,出生日期等)。但我不明白我如何发布我的表单来过滤我的收藏。我无法使用提取方法,因为如果使用GET方法,我的搜索条件将显示在URL中。事实上,我想提交一个POST请求(包含JSON序列化的搜索条件)到服务器并检索用户列表。搜索条件表单和集合

我已阅读骨干文档,但我没有发现任何事情可以让我这样做。这个功能不被骨干支持?有一些workarround来实现这个要求?

在此先感谢

回答

1

总之,我不认为主链是非常适合你所描述的。请阅读更长的版本...

根据你的问题,我认为骨干网将非常适合显示你的用户集合,但不太好在提交你的过滤标准。

您可以创建一个标准模型,并将模型的属性设置为用户名,生日等,然后您可以使用主干将其发布到服务器。但是,当您使用主干进行保存时,假定您保存了标准。假定服务器从该POST返回的任何结果都是条件的更新属性,而不是用户列表。

+0

感谢您的回复,确认我无法直接使用Backbone集合。不过,我想在我的应用程序的其余部分使用Backbone。那么是否有可能实现一个直接提交POST请求的搜索动作(使用$ .ajax)并使用UserCollection.refresh(users)在成功回调中填充我的集合。之后,我可以重新呈现我的ListView。这样做是否可行并正确? – sylmandel 2012-02-10 08:41:49

+0

绝对如此。创建你的表单,使用ajax进行POST,然后在你的成功回调(最有可能是用户的json数组)中执行类似于“App.Users = new UsersCollection(json)”的操作,并将该集合传递给骨干视图。中提琴,你正在使用骨干,就像它的设计:)好运 – timDunham 2012-02-10 14:46:20

0

蒂姆是正确的,这不完全是骨干的意思。这就是说我认为我至少还会使用Backbone模型来跟踪搜索条件的状态。在这个模型中,我将添加一个自定义方法来激活搜索,将序列化模型的状态并将其发布到服务器本身。在此方法的成功之后,我将使用结果来重置当前的用户集合。

这里是我的代码的想法:

var SearchModel = Backbone.Model.extend({ 
    defaults: { 
    firstName: "*", 
    lastName: "Smith" 
    }, 
    search: function() { 
    $.ajax({ 
     dataType: "json", 
     type: "POST", 
     data: this.toJSON(), 
     success: function(data) { 
      this.options.peopleCollection.reset(data); 
     } 
    }) 
    } 
}); 

var myPeopleCollection = new PeopleCollection(); 
var mySearch = new SearchModel({ peopleCollection: myPeopleCollection }); 

mySearch.set({ firstName: "Steve"}); 
mySearch.set({ lastName: "Smith" }); 

mySearch.search();