gpt4 book ai didi

主干.js 访问模型中的模型属性 - this.attribute VS this.get ('attribute' )?

转载 作者:行者123 更新时间:2023-12-03 14:29:51 26 4
gpt4 key购买 nike

根据我的理解,Backbone.js 模型的属性应该通过以下方式声明为有点私有(private)的成员变量

this.set({ attributeName: attributeValue })
// accessing the value
this.get('attributeName');

但是当我在实际模型中编写函数时,这样说似乎要简单得多:
this.attributeName = attributeValue;
// accessing the value
this.attributeName;

另外我会假设后一个版本处理起来会更快,因为它不经过backbone.js的事件管理。

所以我想知道您的专业人士如何处理主要在模型内部使用的属性。这些是人们实际上希望从外部屏蔽的属性,因此像在后一个示例中那样暴露它们可能仍然不正确。当我一直在查看没有 get 和 set 方法的主干.js View 的示例时,似乎可以像第二个示例中那样做。那么在模型中编码时,何时使用 get/set(attribute) 或 this.attribute 有什么好的经验法则吗?或者也许是一个使这一点更清楚的模型示例?

最佳答案

何时使用 model.get(property)model.set(...)

您应该使用 getset访问模型的数据。这意味着作为模型序列化表示的一部分的任何属性,使用 fetch 检索。并坚持使用 save .

何时使用 model.attributes.property

绝不。

您应该始终使用 get ,尤其是 set ,而不是访问 model.attributes直接反对,尽管我已经看到了关于此的相互矛盾的意见。我相信 model 之间有契约(Contract)。它是消费者,它保证可以使用 change 通知消费者模型数据的任何更改。事件。如果您直接修改内部属性对象,则不会发送事件并且此契约(Contract)被破坏。 Backbone 事件非常快,特别是如果您没有附加任何监听器,并且这不是您从过度优化中受益的一点。

虽然直接访问属性而不是 get它本身是无害的,应该避免,所以attributes对象可以被认为是完全私有(private)的。

如果您绝对需要防止某些更改触发事件,您可以使用 silent:true选项:model.set({key:val}, {silent:true}) .这确实违反了上述契约(Contract),甚至 Backbone 自己的文档也给出了以下警告:

Note that this is rarely, perhaps even never, a good idea. Passing through a specific flag in the options for your event callback to look at, and choose to ignore, will usually work out better.



何时使用 model.property

任何不是数据的属性,即临时状态变量、计算属性等,都可以直接附加到模型实体。这些属性应该被认为是临时的和传递的:它们可以在模型初始化时或在其生命周期内重新创建,但它们不应该被持久化,无论是公共(public)的还是私有(private)的。一个典型的命名约定是在私有(private)属性前加上 _字符如下:
this._privateProperty = 'foo';
this.publicProperty = 'bar';

关于主干.js 访问模型中的模型属性 - this.attribute VS this.get ('attribute' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com