我試圖將排序的Backbone.Collection
與另一個列表同步,例如,一個JavaScript數組。我使用下面的代碼(jsfiddle):與排序的Backbone.Collection同步陣列
var coll = new Backbone.Collection();
coll.comparator = "label";
var list = []
coll.on("add", function (model, collection, options) {
list.splice(collection.indexOf(model), 0, model.get("label"));
});
coll.add([
{label: "1"},
{label: "3"},
{label: "5"},
{label: "4"},
{label: "2"}
]);
在這個例子中,這個結果在下面的列表:1, 2, 3, 5, 4
。根本原因是,在添加事件處理程序中,Backbone.Collection已經被所有模型填充,而JS數組卻沒有。由於添加事件是以插入順序觸發的,而不是按排序順序觸發的,所以這會導致數組中的順序錯誤。
我將如何更改我的同步方法/添加處理程序以使其工作?
感謝您的回覆,但正如我在另一個[答案的評論]中指出的(http://stackoverflow.com/questions/25992107/synching-an-array-with-a-sorted-backbone-collection/26004958?iemail= 1&noredirect = 1#comment40706037_25992898),我不想在每次更改時重新創建列表。 – 2014-09-24 07:07:13
我更新了我的回答 – 2014-09-24 09:04:12
感謝您的建議。基於這種方法,我進一步簡化了代碼。由於這似乎是唯一可行的方法,我接受了這個答案。 JS小提琴爲ul/li(http://jsfiddle.net/schm/n0fdmb8a/4/) – 2014-09-24 09:32:51