主干在模型被“设置”到集合中后触发事件
Backbone fire an event after models have been 'set' into a collection
我正在尝试在通过 set
方法将一批模型添加到集合后触发一个事件。我覆盖了 set
方法,调用了它的父 set 方法并在那里放了一个控制台.log它似乎正在触发每个试图添加到 colleciton 中的模型。
class MyCollection extends Backbone.Collection
set: ->
super
console.log('set called')
我无法确定为什么会发生这种情况,但为了继续前进,我决定使用下划线debounce
方法将它们组合在一起,然后触发一个事件。这就是我想出的
class MyCollection extends Backbone.Collection
initialize: ->
@batchComplete = _.debounce(@_batchComplete, 1000)
super
@
_batchComplete: =>
if not window.test
window.test = @
if window.test is @
console.log 'SAME AS PREVIOUS'
else
console.log 'DIFFERENT', window.test, @
window.test = @
@trigger('setComplete')
set: ->
super
@batchComplete()
@
我已经创建了这个集合的一个实例,并尝试使用 set 方法
c = new MyCollection
c.set([{...},{...},{...}])
我对此的期望是让window.test
等于@
但他们似乎指的是不同的位置。这是控制台中的示例输出
> DIFFERNT MyCollection, MyCollection
> DIFFERNT MyCollection, MyCollection
我不明白为什么window.test
和@
不一样.由于每次迭代都不相同,这意味着它没有调用相同的debounce
方法
如果你真的在空集合上调用set
,那么你可以改用reset
:
重置
一次collection.reset([models], [options])
添加一个和删除一个模型都很好,但有时您需要更改的模型太多,以至于您宁愿批量更新集合。使用 reset 将集合替换为新的模型列表(或属性哈希),从而在末尾触发单个
"reset"
事件。
因此,您可以:
c = new MyCollection
c.on('reset', (collection) -> ...)
c.set([{...},{...},{...}])
最后你会得到一个'reset'
事件。
演示:http://jsfiddle.net/ambiguous/EVxM7/
如果reset
不合适,则可以使用_.after
:
_.after(count, function)
后创建函数的一个版本,该版本仅在首次调用计数时间后运行。
所以你可以做这样的事情:
a = array_of_models
c = new Collection
c.on('add', _.after(a.length, (model, collection) -> ...)
c.set(a)
演示:http://jsfiddle.net/ambiguous/6SnSS/
您还可以覆盖set
并触发自定义事件并侦听该自定义事件以了解set
何时完成其工作:
class C extends Backbone.Collection
set: ->
super
@trigger('batch-done', @)
c = new C
c.on('batch-done', (collection) ->
console.log('All done', collection.toJSON())
)
c.set([ ... ])
演示:http://jsfiddle.net/ambiguous/YytvS/
- 骨干-为什么不;t集合.重置触发模型事件
- 如何断开主干集合,使每个子集合也注册到将由父集合注册的所有事件
- 将事件处理程序分配给元素集合
- 如何在集合中的项上触发 jQuery 事件(意外的 jQuery 结果来自 $._data() 与集合的第一个元素)
- 在集合的空结果集上触发“重置”主干事件
- 复合视图在扩展主干集合时未收到“删除”事件
- 主干分组依据集合仅在一次事件单击后呈现
- 主干.js:在集合中使用时不会触发模型事件
- 主干集合未触发添加事件
- 使用模板事件侦听器删除 Meteor.js 集合时出现问题
- 为什么我的主干集合重置事件没有触发
- 主干在模型被“设置”到集合中后触发事件
- 所有集合项的 Backbonejs 事件或每个项视图的事件
- 在Backbone.js集合上引发自定义事件并传递数据
- 启动主干集合更改事件,但视图中没有任何更改
- 通过更改事件调用方法时,主干集合为空
- Backbone.js-can't获取数据,或绑定到集合上的获取事件
- 模型上的主干集合更改事件
- 分离“骨干”集合(事件问题)
- 在集合事件中为主干语法而挣扎