对集合的操作(排序,限制,搜索等)

时间:2011-04-14 17:21:22

标签: javascript jquery backbone.js underscore.js

通常当我使用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个)等?

2 个答案:

答案 0 :(得分: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()上调用,如果你没有引导数据 - 可能什么都不会发生。

答案 1 :(得分: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

或者您可以使用Underscore方法并手动重置集合 http://documentcloud.github.com/backbone/#Collection-Underscore-Methods

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