我要如何插入一个模型转换为Backbone.js的集合在一个特定的指数?(How do I inse

2019-06-23 17:27发布

我需要在位置Collection.length-2插入一个模型到一个集合。 集合中的最后一个模型应该永远留在集合中的最后一个模型。

我试过到目前为止:

我加了一个“页”模式向集“页”,然后试图通过改变其周围序列交换他们:

var insertedpage = Pages.at(Pages.length-1);
var lastpage = Pages.at(Pages.length-2);
insertedpage.set({sequence: Pages.length-1});
lastpage.set({sequence: Pages.length});

我也试图删除最后一个页面,然后添加一个新的页面,然后添加最后一页回。

var lastpage =  Pages.pop();
Pages.add({example1: example2});
Pages.push(lastpage);

这些都不奏效。 新添加的页面仍显示在收藏作为最后一个模型。 我需要调用某种秩序的功能之后呢?

Answer 1:

很抱歉的简短回答(没有时间做出反应),但看看定义一个比较函数。

http://backbonejs.org/#Collection-comparator



Answer 2:

Backbone.Collection.add()需要一个options支持的对象at指定的索引关键字。

通过{at: index}指定在拼接模型进入收集index

例:

Pages.add({ foo: bar }, { at: Pages.length - 2 })


Answer 3:

沿着相同的建议作为罗布Hruska的,使用Backbone.Collection.add()atoptions对象。

Pages = new Backbone.Collection([
  {id:1, foo:'bar'},
  {id:2, foo:'barista'}  /* Last model should remain last */
]);

/* Insert new "page" not at the end (default) but length minus 1 */
Pages.add({id:3, foo:'bartender'}, { at: Pages.length - 1 });

Pages.at(0).id === 1; // true
Pages.at(Pages.length - 2).id === 3; // true
Pages.at(Pages.length - 1).id === 2; // true

你提到Pages似乎是由属性进行排序sequence ; 你碰巧有一个comparator的Pages集合定义的函数?

另外一个问题,你要更新该属性sequence上的所有现有页面车型目前在集合时,一个新的页面被添加到第二到最后一个位置? 或者是属性的尝试来完成你原来的问题?



文章来源: How do I insert a model into a backbone.js collection in a specific index?