tor*_*rno 16 model backbone.js
根据我的理解,Backbone.js模型的属性应该通过说明声明为私有成员变量
this.set({ attributeName: attributeValue })
// accessing the value
this.get('attributeName');
Run Code Online (Sandbox Code Playgroud)
但是当我在实际模型中编写函数时,这样说似乎更简单:
this.attributeName = attributeValue;
// accessing the value
this.attributeName;
Run Code Online (Sandbox Code Playgroud)
此外,我认为后一版本的处理速度更快,因为它不通过backbone.js的事件管理.
所以我想知道你们如何使用主要在模型内部使用的属性.这些是人们实际上希望与外界有点屏蔽的属性,因此在后一个示例中将它们暴露出来可能不是正确的.当我一直在查看没有get和set方法的backbone.js视图的例子时,在第二个例子中似乎很好.那么在模型中编码时使用get/set(attribute)或this.attribute是否有任何好的经验法则?或者也许是一个模型的例子,使这更清楚?
jev*_*lio 55
何时使用model.get(property)和model.set(...)
您应该使用get和set访问模型的数据.这意味着属于使用fetch和持久使用检索的模型序列化表示的一部分的任何属性save.
何时使用 model.attributes.property
决不.
你应该总是使用get,特别是set,而不是model.attributes直接访问对象,虽然我已经看到相互矛盾的意见.我相信a model和它的消费者之间存在合同,这保证了消费者可以使用该change事件通知模型数据的任何变化.如果直接修改内部属性对象,则不会发送事件并且此合同将被破坏.Backbone事件非常快,特别是如果你没有附加任何监听器,并且这不是一个可以从你的过度优化中获益的一点.
虽然直接访问属性而不是get它本身是非常无害的,但应该避免它,因此可以将attributes对象视为完全私有.
如果您绝对需要阻止某些更改触发事件,可以使用以下silent:true选项:model.set({key:val}, {silent:true}).这确实打破了上述合同,甚至Backbone自己的文档也给出了以下警告:
请注意,这很少,甚至从来都不是一个好主意.通过选项中的特定标志来查看事件回调以及选择忽略,通常会更好地解决问题.
何时使用 model.property
任何非数据的属性,即临时状态变量,计算属性等,都可以直接附加到模型实体.这些属性应该被认为是临时的和可传递的:它们可以在模型初始化时或在其生命周期中重新创建,但它们不应该被持久化,无论是公共的还是私有的.典型的命名约定是使用_字符为私有属性添加前缀,如下所示:
this._privateProperty = 'foo';
this.publicProperty = 'bar';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20572 次 |
| 最近记录: |