2012-02-09 44 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();