backbone-js:如何默默地初始化一个新的集合?

发布于 2024-12-24 21:32:15 字数 217 浏览 0 评论 0原文

我一定是在做一些愚蠢的事情,或者可能错过了 Backbone 文档的一些关键部分,但我无法理解为什么当我以这种方式初始化新集合时 Model.validate 函数会触发: http://jsfiddle.net/5a3k/QSeH6/ ..有什么想法我出错了吗?

编辑:更改标题

I must be doing something dumb, or maybe missing some crucial part of the Backbone documentation, but I cant understand why the Model.validate function is firing when I initialize a new Collection in this way: http://jsfiddle.net/5a3k/QSeH6/ ..any ideas where I'm going wrong?

edit: changed title

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸠魁 2024-12-31 21:32:15

通过执行这一行:

var myCollection = new Collection([{id: 'smith'}]);

您可以使用一个模型创建新集合。构造函数中传递的所有模型都将添加到集合中。每个添加的模型都经过验证。

详细信息:

  1. Backbone.Collection 构造函数正在调用 this.reset() (来源)。
  2. .reset() 会默默地将所有模型添加到集合中 (来源)。
  3. .add() 将为每个模型调用内部 ._add() (来源)。
  4. 内部 ._add() 将调用 .prepareModel 来检查模型是否有效(来源)。

更新(基于问题中的编辑):

仅当模型不是 Backbone.Model 的实例时才执行 model.validate来源)。

因此,如果您使用创建集合

var myCollection = new Collection([{id: 'smith'}]);

,则模型是Object 的实例。但如果您使用:

var myCollection = new Collection([ new Model({id: 'smith'}) ]);

则模型是 Backbone.Model 的实例,并且验证将被跳过。

By executing this line:

var myCollection = new Collection([{id: 'smith'}]);

You create new collection with one model. All models passed in the constructor will be added into the collection. Each added model is validated.

Details:

  1. Backbone.Collection constructor is calling this.reset() (source).
  2. .reset() will silently add all the models into the collection (source).
  3. .add() will call internal ._add() for each model (source).
  4. Internal ._add() will call .prepareModel which is checking if the model is valid (source).

Update (based on edit in the question):

model.validate is executed only if the model is not instance of Backbone.Model (source).

So if you create a collection using

var myCollection = new Collection([{id: 'smith'}]);

then the model is instance of Object. But if you use:

var myCollection = new Collection([ new Model({id: 'smith'}) ]);

then the model is instance of Backbone.Model and validation is skipped.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文