javascript - 如何对 Backbone 模型/ View 进行排序?

标签 javascript backbone.js

使用 Backbone 保持模型任何 View 顺序的基本方法是什么?我有一些想法,但还不完全清楚。

我想通过一个名为“created_at”的字段来保持它们的顺序。我知道可以在集合中提供比较器功能,但我不确定它是如何工作的。

我还希望 View 始终(在列表中)反射(reflect)集合中的此顺序。不过,我不太确定我与模型的联系在哪里。我猜我会寻找索引属性的更改,然后更新 a 以匹配?

非常感谢您的帮助或解释!

最佳答案

当您定义集合时,您还定义了比较器。 我最近是这样做的:

        comparators: {
            id: function(animal) {
              return Number(animal.get("id"));
            },

            d_id: function(animal) {
              return -Number(animal.get("id")); // descending
            },

            name: function(animal) {
              return animal.get("name");
            },

            d_name: function(animal) {
              return String.fromCharCode.apply(String, _.map(animal.get("name").split(""), function (c) {
                    return 0xffff - c.charCodeAt();
                    })
              );
            },
        }

这些是我在我的集​​合代码中定义的。

然后,在渲染我的 Collection View 时,我只是这样做了 (在我看来,这是在 initialize() 中渲染整个集合的:

this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[// here I put 'id' or 'd_id' etc. ];
this.collection.sort();

由于此代码位于 View 的初始化中,因此您可以定义比较器 当您初始化 View 时,并向其传递一个比较器的名称,如下所示:

var directory = new pageView("d_id");

并且通过 initialize(comparator_id) 您可以将其传递给初始化中的代码:

this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[comparator_id];
this.collection.sort();

然后我可以在渲染和重新渲染 View /页面时使用该集合

编辑:

这里是Backbone's collection.comparator文档, 下面是 sort()

的解释

基本上,比较器可以是模型的属性或返回属性的函数, 或者负数属性,如果它是数字,则按降序排列, 或字符串或其反向值(按降序排列) 就像我在这里给你的例子一样。

因此,比较器返回一个属性,如“id”或“name”,或“-id”,“-name”等。 (对于字符串,你不能只是将其设为“负数”,你需要应用更复杂的函数, 正如我所写。)

关于javascript - 如何对 Backbone 模型/ View 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391067/

相关文章:

javascript - 如何使用ajax和pjax重新加载html的特定部分?

javascript - 使用 D3.js 和 AngularJS 定制折线图

javascript - 在 href lnks 中使用 javascript void(0) 的替代方法是什么? (对于 Backbone 和 SPA 站点)

validation - Backbone.js:在集合上运行验证并触发错误事件,但如果验证失败则不中止集合

ajax - 恢复删除方法

javascript - 方法未在 backbone.js + coffeescript 上定义

JavaScript 根据用户输入设置定时器

javascript - Desktop Safari - 使用 js 将 <audio> src 设置为 blob

javascript - 为什么变量没有被访问

object - 我可以向主干 View 添加属性吗?