2

我一直在尝试破译backbone.relational 源代码。我发现它会触发很多自己的事件。我登录了我的一些模型,发现很多这些事件似乎无缘无故地触发了。

大问题是我应该听哪些事件以及哪些是内部事件

Backbone.Relational 似乎触发的事件是:

  • 更新:[属性] 似乎触发 [第 725、941 行]
  • 关系:添加 当在集合上调用 .add() 时,这似乎会触发
  • 关系:删除 当在集合上调用 .remove() 时,这似乎会触发 [1651, 1003]
  • 关系:重置这似乎没有韵律或理由(为什么在排序时被解雇!!!)[1664、1675]
  • 关系:更改:[属性]:不知道这是做什么的 [1138]

有人可以解释每个的目的是什么以及是否可以从源中删除某些触发器

作为比较,Backbone 的原生事件:

  • "add" (model, collection, options) — 将模型添加到集合时。
  • "remove" (model, collection, options) — 当模型从集合中移除时。
  • "reset" (collection, options) — 当集合的全部内容被替换时。
  • "sort" (collection, options) — 当集合被重新排序时。
  • "change" (model, options) — 当模型的属性发生变化时。
  • "change:[attribute]" (model, value, options) — 当特定属性被更新时。
  • "destroy" (model, collection, options) — 当模型被销毁时。
  • "request" (model, xhr, options) — 当模型(或集合)开始向服务器发出请求时。
  • "sync" (model, resp, options) — 当模型(或集合)与服务器成功同步时。
  • "error" (model, xhr, options) — 当模型的保存调用在服务器上失败时。
  • "invalid" (model, error, options) — 当客户端上的模型验证失败时。
  • "route:[name]" (params) — 当特定路由匹配时由路由器触发。
  • "route" (router, route, params) — 当任何路由匹配时由历史(或路由器)触发。
  • “all”——这个特殊事件触发任何触发事件,将事件名称作为第一个参数传递。
4

1 回答 1

4

Backbone.Relational 自述文件中非常清楚地说明了每个事件的目的:

  • 将新事件绑定到一个Backbone.RelationalModelfor:
    • 除了HasMany关系(绑定到add:<key>
    • HasMany关系中删除(绑定到remove:<key>
    • 重置HasMany关系(绑定到reset:<key>
    • 对键本身HasManyHasOne关系的更改(绑定到update:<key>

至于你应该听哪些事件:如果你需要的话,所有的。这就是为什么他们在那里,并记录在案。

至于哪些是内部使用的,可以在Backbone.Relational 源码中找到答案。如果您.bind在源文件中搜索,您会看到它在内部侦听以下事件:

  • relational:add
  • relational:remove
  • relational:change:key
  • relational:reset

所以我怀疑任何事件触发器都可以“安全地”从源中删除。一般来说,我会说修补库源是解决问题的错误方法。

在过去的几天里,您发布了一些与 Backbone.Relational 事件相关的问题。也许尝试解释为什么这些事件会导致问题,我们会寻找解决方法?

于 2013-01-26T12:24:01.180 回答