javascript - 2 个具有相同模型但排序顺序不同的 backbone.js 集合

标签 javascript backbone.js backbone.js-collections

我必须在同一页面的两个不同位置显示相同的 Backbone 模型集合(一次在导航中,一次在主区域中),我需要使集合中的模型保持同步但允许每个集合以不同的方式排序。导航始终按字母升序排列,但主要内容区域的排序可由用户配置。最好的方法是什么?我是否应该有 2 个不同的集合和事件绑定(bind)来尝试确保它们的模型始终相同(使用添加/删除/重置事件)?我应该只有 1 个集合并根据需要动态更改它的排序顺序吗?

最佳答案

我通常认为不应更改集合以表示 transient 重新排序,因此:

  • View 听取通常事件的集合,
  • View 会在必须呈现时检索根据需要排序的自定义模型列表。

例如,

var C = Backbone.Collection.extend({
    comparator: function (model) {
        return model.get('name');
    },

    toJSON_sorted: function (reversed) {
        var models = this.toJSON();
        return (!reversed) ? models : models.reverse();
    }
});

var V = Backbone.View.extend({
    initialize: function () {
        this.collection.on('reset', this.render, this);
        this.collection.on('change', this.render, this);
        this.collection.on('add', this.render, this);
        this.collection.on('delete', this.render, this);
    }
});
var NavView = V.extend({
    render : function () {
        console.log(this.collection.toJSON());
    }
});
var MainView = V.extend({
    render : function () {
        var data = this.collection.toJSON_sorted(this.reversed);
        console.log(data);
    }
});

调用这些定义

var c=new C();
var v1 = new NavView({collection:c});
var v2 = new MainView({collection:c});
v2.reversed=true;

c.reset([
    {name:'Z'},
    {name:'A'},
    {name:'E'}
]);

按预期顺序提供带有模型的 View ,并允许您随意更改排序方向。您还可以定制 toJSON_sorted 来处理其他字段的排序。

一个可以玩的 fiddle http://jsfiddle.net/nikoshr/Yu8y8/

关于javascript - 2 个具有相同模型但排序顺序不同的 backbone.js 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12372861/

相关文章:

javascript - 使用另一个属性值更改数组中对象的属性值

javascript - 使用 fullPage.js 定位导航栏

javascript - 错误 : THREE. PlaneBufferGeometry 不是构造函数

javascript - 如何从 Create React App/build 文件夹制作 npm 包?

javascript - 如何使用 JSON 为交互式 Backbone.js 应用程序提供支持

javascript - Backbone.js 代码与常规 JS 代码

backbone.js - 将主干更改事件绑定(bind)到集合中模型的属性

ruby-on-rails-3 - Backbone.js Collection.models 不工作

javascript - 具有多个模型的主干集合?