使用 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/