【问题标题】:how to sort backbone models/views?如何对主干模型/视图进行排序?
【发布时间】:2012-11-15 03:18:00
【问题描述】:

使用 Backbone 保持模型视图有序的基本方法是什么?我有一些想法,但并不完全清楚。

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

我还希望视图始终反映集合中的此顺序(在列表中)。不过,我不确定我在哪里与模型联系在一起。我猜我在索引属性中寻找变化,然后更新 a 以匹配?

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

【问题讨论】:

标签: javascript backbone.js


【解决方案1】:

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

        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();
                    })
              );
            },
        }

这些是我在收藏代码中定义的。

然后,在渲染我的集合视图时,我只是这样做了 (这是在我看来呈现整个集合的,initialize()

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

由于此代码在您的视图的初始化中,您可以定义比较器 当你初始化你的视图,并像这样传递一个比较器的名字:

var directory = new pageView("d_id");

通过initialize(comparator_id),您可以在初始化时将其传递给您的代码:

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

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

已编辑:

这里是Backbone's collection.comparator 文档, 并且正下方是sort()的解释

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

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

【讨论】:

  • 致 toninoj:我在我的代码中做了类似的事情,它工作正常,但对于最新的 chrome,如果我在短时间内刷新列表两次,结果将作为我的比较器反转.不确定它是这样设计的还是有错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多