2011-04-14 51 views
2

通常,當我使用jquery構建一個簡單的應用程序來顯示數據時,我會根據某些操作簡單地更改一些全局變量,然後當我準備好檢索來自服務器的數據,我會將這些變量傳遞給服務器。集合上的操作(排序,限制,搜索等)

在backbone.js中執行此操作的好方法是什麼?我的觀點是否處理這個問題我至今這一觀點:

var ListView = Backbone.View.extend({ 
    initialize: function() { 
     this.render(); 
    }, 

    render: function() { 

    template = _.template("\ 
    <table>\ 
    <% _(collection).each(function(model){%>\ 
    <tr><td><%=model.name%></td><td><%=model.email%></td></tr>\ 
    <%}); %>\ 
    </table>\ 
    "); 

     var context = {collection: this.collection.toJSON()}; 
     $(this.el).html(template(context)); 
     $('#app').html(this.el); 
    } 
}); 

基本上在我的控制,我創建一個users集合,然後我用users.fetch(),然後通過收集users到一個新的ListView對象。初始化函數自動呈現(這是不好的做法?)我知道backbone.js中有事件,我猜這就是最終的結果。我如何處理某些字段的排序或在特定字段中搜索某些文本或選擇返回多少結果(即每頁10個)等?

回答

0

因爲backbone.js使用RESTfull Api,所以它並不那麼容易。你將不得不重寫Backbone.sync READ方法來構建自己的URL電話:How to override Backbone.sync?

這可以幫助你還有:REST API Best practices: Where to put parameters?

我會使然後,當你已經得到了你回來所需要的數據。初始化將在var listview = new ListView()上被調用,並且如果你沒有引導數據 - 可能什麼都不會發生。

0

可以使用這樣設置比較:()

http://documentcloud.github.com/backbone/#Collection-comparator

var Chapter = Backbone.Model; 
var chapters = new Backbone.Collection; 

chapters.comparator = function(chapter) { 
    return chapter.get("page"); 
}; 

chapters.add(new Chapter({page: 9, title: "The End"})); 
chapters.add(new Chapter({page: 5, title: "The Middle"})); 
chapters.add(new Chapter({page: 1, title: "The Beginning"})); 

alert(chapters.pluck('title')); 

可以使用Collection.sort

http://documentcloud.github.com/backbone/#Collection-sort

,或者您也可以手動使用下劃線的方法和重置集合 http://documentcloud.github.com/backbone/#Collection-Underscore-Methods

http://documentcloud.github.com/backbone/#Collection-reset