如何对骨干模型/视图进行排序?

时间:2012-11-15 03:18:00

标签: javascript backbone.js

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

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

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

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

1 个答案:

答案 0 :(得分:4)

定义集合时,还可以定义比较器。 我最近这样做了:

        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”等。 (对于字符串,你不能只是让它“消极”,你需要应用更复杂的功能, 正如我写的那样。)