使用 Backbone 保持模型任何视图有序的基本方法是什么?我有一些想法,但并不完全清楚。
我想通过一个名为“created_at”的字段来保持它们的顺序。我知道可以在集合中提供比较器功能,但我不确定它是如何工作的。
我还希望集合中的这个顺序始终反映在视图中(在列表中)。不过,我不确定我在哪里与模型联系在一起。我猜我在索引属性中寻找变化,然后更新 a 以匹配?
非常感谢任何帮助或解释!
使用 Backbone 保持模型任何视图有序的基本方法是什么?我有一些想法,但并不完全清楚。
我想通过一个名为“created_at”的字段来保持它们的顺序。我知道可以在集合中提供比较器功能,但我不确定它是如何工作的。
我还希望集合中的这个顺序始终反映在视图中(在列表中)。不过,我不确定我在哪里与模型联系在一起。我猜我在索引属性中寻找变化,然后更新 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();
})
);
},
}
这些我在我的收藏代码中定义。
然后,在渲染我的集合视图时,我只是这样做了(这是在我的视图中呈现整个集合,在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 的 collection.comarator文档,下面是对sort()
基本上,比较器可以是模型的属性或返回属性的函数,或者是负属性,如果它是数字,则用于降序排列,或者是字符串或其反向值,用于降序排列,就像我在这里给你的示例一样。
因此,比较器返回一个属性,如“id”或“name”,或“-id”,“-name”等(对于字符串,您不能只将其设为“负数”,您需要应用更复杂的函数,正如我所写。)